From 18b6fe7f39dbd1be3ef8caa4704c45c7bd6134b9 Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Mon, 17 Nov 2025 11:17:16 -0800 Subject: [PATCH 01/12] go to implementation tests --- .../fourslash/_scripts/convertFourslash.mts | 16 ++++- internal/fourslash/baselineutil.go | 2 - internal/fourslash/fourslash.go | 59 +++++++++++++++++++ .../goToImplementationClassMethod_00_test.go | 21 +++++++ .../goToImplementationClassMethod_01_test.go | 27 +++++++++ .../gen/goToImplementationEnum_00_test.go | 22 +++++++ .../gen/goToImplementationEnum_01_test.go | 22 +++++++ ...ToImplementationInterfaceMethod_00_test.go | 34 +++++++++++ ...ToImplementationInterfaceMethod_01_test.go | 31 ++++++++++ ...ToImplementationInterfaceMethod_02_test.go | 31 ++++++++++ ...ToImplementationInterfaceMethod_03_test.go | 34 +++++++++++ ...ToImplementationInterfaceMethod_04_test.go | 35 +++++++++++ ...ToImplementationInterfaceMethod_05_test.go | 47 +++++++++++++++ ...ToImplementationInterfaceMethod_06_test.go | 58 ++++++++++++++++++ ...ToImplementationInterfaceMethod_08_test.go | 31 ++++++++++ ...ToImplementationInterfaceMethod_09_test.go | 40 +++++++++++++ ...ToImplementationInterfaceMethod_10_test.go | 56 ++++++++++++++++++ ...ToImplementationInterfaceMethod_11_test.go | 22 +++++++ ...ImplementationInterfaceProperty_00_test.go | 32 ++++++++++ ...ImplementationInterfaceProperty_01_test.go | 25 ++++++++ .../goToImplementationInterface_00_test.go | 35 +++++++++++ .../goToImplementationInterface_01_test.go | 36 +++++++++++ .../goToImplementationInterface_02_test.go | 38 ++++++++++++ .../goToImplementationInterface_03_test.go | 19 ++++++ .../goToImplementationInterface_04_test.go | 30 ++++++++++ .../goToImplementationInterface_05_test.go | 22 +++++++ .../goToImplementationInterface_06_test.go | 24 ++++++++ .../goToImplementationInterface_07_test.go | 40 +++++++++++++ .../goToImplementationInterface_08_test.go | 31 ++++++++++ .../goToImplementationInterface_09_test.go | 21 +++++++ .../goToImplementationInterface_10_test.go | 28 +++++++++ .../gen/goToImplementationInvalid_test.go | 19 ++++++ .../gen/goToImplementationLocal_00_test.go | 18 ++++++ .../gen/goToImplementationLocal_01_test.go | 18 ++++++ .../gen/goToImplementationLocal_02_test.go | 20 +++++++ .../gen/goToImplementationLocal_03_test.go | 22 +++++++ .../gen/goToImplementationLocal_04_test.go | 20 +++++++ .../gen/goToImplementationLocal_05_test.go | 22 +++++++ .../gen/goToImplementationLocal_06_test.go | 18 ++++++ .../gen/goToImplementationLocal_07_test.go | 18 ++++++ .../gen/goToImplementationLocal_08_test.go | 18 ++++++ .../goToImplementationNamespace_00_test.go | 26 ++++++++ .../goToImplementationNamespace_01_test.go | 21 +++++++ .../goToImplementationNamespace_02_test.go | 21 +++++++ .../goToImplementationNamespace_03_test.go | 37 ++++++++++++ .../goToImplementationNamespace_04_test.go | 37 ++++++++++++ .../goToImplementationNamespace_05_test.go | 28 +++++++++ .../goToImplementationNamespace_06_test.go | 22 +++++++ ...tionShorthandPropertyAssignment_00_test.go | 47 +++++++++++++++ ...tionShorthandPropertyAssignment_01_test.go | 57 ++++++++++++++++++ ...tionShorthandPropertyAssignment_02_test.go | 31 ++++++++++ .../gen/goToImplementationSuper_00_test.go | 25 ++++++++ .../gen/goToImplementationSuper_01_test.go | 25 ++++++++ .../gen/goToImplementationThis_00_test.go | 23 ++++++++ .../gen/goToImplementationThis_01_test.go | 21 +++++++ .../goToImplementationTypeAlias_00_test.go | 21 +++++++ ...oToImplementation_inDifferentFiles_test.go | 30 ++++++++++ .../gen/goToImplementation_satisfies_test.go | 24 ++++++++ .../tests/gen/implementation01_test.go | 18 ++++++ 59 files changed, 1671 insertions(+), 5 deletions(-) create mode 100644 internal/fourslash/tests/gen/goToImplementationClassMethod_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationClassMethod_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationEnum_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationEnum_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_02_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_03_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_04_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_05_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_06_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_08_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_09_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_10_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceMethod_11_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceProperty_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterfaceProperty_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_02_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_03_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_04_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_05_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_06_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_07_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_08_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_09_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInterface_10_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationInvalid_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_02_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_03_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_04_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_05_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_06_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_07_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationLocal_08_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationNamespace_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationNamespace_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationNamespace_02_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationNamespace_03_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationNamespace_04_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationNamespace_05_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationNamespace_06_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_02_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationSuper_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationSuper_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationThis_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationThis_01_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementationTypeAlias_00_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go create mode 100644 internal/fourslash/tests/gen/goToImplementation_satisfies_test.go create mode 100644 internal/fourslash/tests/gen/implementation01_test.go diff --git a/internal/fourslash/_scripts/convertFourslash.mts b/internal/fourslash/_scripts/convertFourslash.mts index 169151c118..488c1abcd5 100644 --- a/internal/fourslash/_scripts/convertFourslash.mts +++ b/internal/fourslash/_scripts/convertFourslash.mts @@ -198,6 +198,7 @@ function parseFourslashStatement(statement: ts.Statement): Cmd[] | undefined { case "baselineGoToDefinition": case "baselineGetDefinitionAtPosition": case "baselineGoToType": + case "baselineGoToImplementation": // Both `baselineGoToDefinition` and `baselineGetDefinitionAtPosition` take the same // arguments, but differ in that... // - `verify.baselineGoToDefinition(...)` called getDefinitionAndBoundSpan @@ -1130,14 +1131,14 @@ function parseBaselineDocumentHighlightsArgs(args: readonly ts.Expression[]): [V } function parseBaselineGoToDefinitionArgs( - funcName: "baselineGoToDefinition" | "baselineGoToType" | "baselineGetDefinitionAtPosition", + funcName: "baselineGoToDefinition" | "baselineGoToType" | "baselineGetDefinitionAtPosition" | "baselineGoToImplementation", args: readonly ts.Expression[], ): [VerifyBaselineGoToDefinitionCmd] | undefined { let boundSpan: true | undefined; if (funcName === "baselineGoToDefinition") { boundSpan = true; } - let kind: "verifyBaselineGoToDefinition" | "verifyBaselineGoToType"; + let kind: "verifyBaselineGoToDefinition" | "verifyBaselineGoToType" | "verifyBaselineGoToImplementation"; switch (funcName) { case "baselineGoToDefinition": case "baselineGetDefinitionAtPosition": @@ -1146,6 +1147,9 @@ function parseBaselineGoToDefinitionArgs( case "baselineGoToType": kind = "verifyBaselineGoToType"; break; + case "baselineGoToImplementation": + kind = "verifyBaselineGoToImplementation"; + break; } const newArgs = []; for (const arg of args) { @@ -1824,7 +1828,7 @@ interface VerifyBaselineFindAllReferencesCmd { } interface VerifyBaselineGoToDefinitionCmd { - kind: "verifyBaselineGoToDefinition" | "verifyBaselineGoToType"; + kind: "verifyBaselineGoToDefinition" | "verifyBaselineGoToType" | "verifyBaselineGoToImplementation"; markers: string[]; boundSpan?: true; ranges?: boolean; @@ -1984,6 +1988,11 @@ function generateBaselineGoToDefinition({ markers, ranges, kind, boundSpan }: Ve return `f.VerifyBaselineGoToTypeDefinition(t)`; } return `f.VerifyBaselineGoToTypeDefinition(t, ${markers.join(", ")})`; + case "verifyBaselineGoToImplementation": + if (ranges || markers.length === 0) { + return `f.VerifyBaselineGoToImplementation(t)`; + } + return `f.VerifyBaselineGoToImplementation(t, ${markers.join(", ")})`; } } @@ -2038,6 +2047,7 @@ function generateCmd(cmd: Cmd): string { return generateBaselineDocumentHighlights(cmd); case "verifyBaselineGoToDefinition": case "verifyBaselineGoToType": + case "verifyBaselineGoToImplementation": return generateBaselineGoToDefinition(cmd); case "verifyBaselineQuickInfo": // Quick Info -> Hover diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index cc61da098a..5754ca0f42 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -51,8 +51,6 @@ func getBaselineExtension(command string) string { return "baseline" case "Auto Imports": return "baseline.md" - case "findAllReferences", "goToDefinition", "findRenameLocations": - return "baseline.jsonc" default: return "baseline.jsonc" } diff --git a/internal/fourslash/fourslash.go b/internal/fourslash/fourslash.go index 2205dbdfb5..2760968fcb 100644 --- a/internal/fourslash/fourslash.go +++ b/internal/fourslash/fourslash.go @@ -2763,3 +2763,62 @@ func isLibFile(fileName string) bool { } var AnyTextEdits *[]*lsproto.TextEdit + +func (f *FourslashTest) VerifyBaselineGoToImplementation(t *testing.T, markerNames ...string) { + markers := f.lookupMarkersOrGetRanges(t, markerNames) + + for _, markerOrRange := range markers { + f.GoToMarkerOrRange(t, markerOrRange) + + params := &lsproto.ImplementationParams{ + TextDocument: lsproto.TextDocumentIdentifier{ + Uri: lsconv.FileNameToDocumentURI(f.activeFilename), + }, + Position: f.currentCaretPosition, + } + + resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentImplementationInfo, params) + if resMsg == nil { + if f.lastKnownMarkerName == nil { + t.Fatalf("Nil response received for implementation request at pos %v", f.currentCaretPosition) + } else { + t.Fatalf("Nil response received for implementation request at marker '%s'", *f.lastKnownMarkerName) + } + } + if !resultOk { + if f.lastKnownMarkerName == nil { + t.Fatalf("Unexpected implementation response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) + } else { + t.Fatalf("Unexpected implementation response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) + } + } + + // Strada did not allow for LocationLinks, so we convert them to Locations here. + // We also don't include the origin selection range in the baselines for the same reason. + var resultAsLocations []lsproto.Location + if result.Locations != nil { + resultAsLocations = *result.Locations + } else if result.Location != nil { + resultAsLocations = []lsproto.Location{*result.Location} + } else if result.DefinitionLinks != nil { + var originRange *lsproto.Range + resultAsLocations = core.Map(*result.DefinitionLinks, func(link *lsproto.LocationLink) lsproto.Location { + if originRange != nil && originRange != link.OriginSelectionRange { + panic("multiple different origin ranges in definition links") + } + originRange = link.OriginSelectionRange + return lsproto.Location{ + Uri: link.TargetUri, + Range: link.TargetSelectionRange, + } + }) + } + f.addResultToBaseline(t, "goToImplementation", f.getBaselineForLocationsWithFileContents( + resultAsLocations, + baselineFourslashLocationsOptions{ + marker: markerOrRange, + markerName: "/*GOTO IMPL*/", + }, + )) + } +} diff --git a/internal/fourslash/tests/gen/goToImplementationClassMethod_00_test.go b/internal/fourslash/tests/gen/goToImplementationClassMethod_00_test.go new file mode 100644 index 0000000000..d02e7c6aaf --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationClassMethod_00_test.go @@ -0,0 +1,21 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationClassMethod_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `class Bar { + [|{|"parts": ["(","method",")"," ","Bar",".","hello","(",")",":"," ","void"], "kind": "method"|}hello|]() {} +} + +new Bar().hel/*reference*/lo;` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationClassMethod_01_test.go b/internal/fourslash/tests/gen/goToImplementationClassMethod_01_test.go new file mode 100644 index 0000000000..e7c05e2591 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationClassMethod_01_test.go @@ -0,0 +1,27 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationClassMethod_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `abstract class AbstractBar { + abstract he/*declaration*/llo(): void; +} + +class Bar extends AbstractBar{ + [|hello|]() {} +} + +function whatever(x: AbstractBar) { + x.he/*reference*/llo(); +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference", "declaration") +} diff --git a/internal/fourslash/tests/gen/goToImplementationEnum_00_test.go b/internal/fourslash/tests/gen/goToImplementationEnum_00_test.go new file mode 100644 index 0000000000..abc6e7f129 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationEnum_00_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationEnum_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `enum Foo { + [|Foo1|] = function initializer() { return 5 } (), + Foo2 = 6 +} + +Foo.Fo/*reference*/o1;` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationEnum_01_test.go b/internal/fourslash/tests/gen/goToImplementationEnum_01_test.go new file mode 100644 index 0000000000..aae6605377 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationEnum_01_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationEnum_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `enum [|Foo|] { + Foo1 = function initializer() { return 5 } (), + Foo2 = 6 +} + +Fo/*reference*/o;` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_00_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_00_test.go new file mode 100644 index 0000000000..34d7f11605 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_00_test.go @@ -0,0 +1,34 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + he/*declaration*/llo: () => void +} + +var bar: Foo = { [|hello|]: helloImpl }; +var baz: Foo = { "[|hello|]": helloImpl }; + +function helloImpl () {} + +function whatever(x: Foo = { [|hello|]() {/**1*/} }) { + x.he/*function_call*/llo() +} + +class Bar { + x: Foo = { [|hello|]() {/*2*/} } + + constructor(public f: Foo = { [|hello|]() {/**3*/} } ) {} +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call", "declaration") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_01_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_01_test.go new file mode 100644 index 0000000000..963a8a7dbc --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_01_test.go @@ -0,0 +1,31 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hel/*declaration*/lo(): void; + okay?: number; +} + +class Bar implements Foo { + [|hello|]() {} + public sure() {} +} + +function whatever(a: Foo) { + a.he/*function_call*/llo(); +} + +whatever(new Bar());` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call", "declaration") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_02_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_02_test.go new file mode 100644 index 0000000000..839a37a72b --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_02_test.go @@ -0,0 +1,31 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_02(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + he/*declaration*/llo(): void +} + +abstract class AbstractBar implements Foo { + abstract hello(): void; +} + +class Bar extends AbstractBar { + [|hello|]() {} +} + +function whatever(a: AbstractBar) { + a.he/*function_call*/llo(); +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call", "declaration") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_03_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_03_test.go new file mode 100644 index 0000000000..ff8dd77d57 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_03_test.go @@ -0,0 +1,34 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_03(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hello (): void; +} + +class Bar extends SuperBar { + [|hello|]() {} +} + +class SuperBar implements Foo { + hello() {} // should not show up +} + +class OtherBar implements Foo { + hello() {} // should not show up +} + +new Bar().hel/*function_call*/lo(); +new Bar()["hello"]();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_04_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_04_test.go new file mode 100644 index 0000000000..3da4db562d --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_04_test.go @@ -0,0 +1,35 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_04(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hello (): void; +} + +class Bar extends SuperBar { + [|hello|]() {} +} + +class SuperBar implements Foo { + [|hello|]() {} +} + +class OtherBar implements Foo { + hello() {} // should not show up +} + +function (x: SuperBar) { + x.he/*function_call*/llo() +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_05_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_05_test.go new file mode 100644 index 0000000000..8173bbb024 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_05_test.go @@ -0,0 +1,47 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_05(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hello (): void; +} + +class SuperBar implements Foo { + [|hello|]() {} +} + +class Bar extends SuperBar { + hello2() {} +} + +class OtherBar extends SuperBar { + hello() {} + hello2() {} + hello3() {} +} + +class NotRelatedToBar { + hello() {} // Equivalent to last case, but shares no common ancestors with Bar and so is not returned + hello2() {} + hello3() {} +} + +class NotBar extends SuperBar { + hello() {} // Should not be returned because it is not structurally equivalent to Bar +} + +function whatever(x: Bar) { + x.he/*function_call*/llo() +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_06_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_06_test.go new file mode 100644 index 0000000000..032803fd35 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_06_test.go @@ -0,0 +1,58 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_06(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface SuperFoo { + hello (): void; +} + +interface Foo extends SuperFoo { + someOtherFunction(): void; +} + +class Bar implements Foo { + [|hello|]() {} + someOtherFunction() {} +} + +function createFoo(): Foo { + return { + [|hello|]() {}, + someOtherFunction() {} + }; +} + +var y: Foo = { + [|hello|]() {}, + someOtherFunction() {} +}; + +class FooLike implements SuperFoo { + hello() {} + someOtherFunction() {} +} + +class NotRelatedToFoo { + hello() {} // This case is equivalent to the last case, but is not returned because it does not share a common ancestor with Foo + someOtherFunction() {} +} + +class NotFoo implements SuperFoo { + hello() {} // We only want implementations of Foo, even though the function is declared in SuperFoo +} + +function (x: Foo) { + x.he/*function_call*/llo() +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_08_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_08_test.go new file mode 100644 index 0000000000..42bc11d378 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_08_test.go @@ -0,0 +1,31 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_08(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hello (): void; +} + +class SuperBar implements Foo { + [|hello|]() {} +} + +class Bar extends SuperBar { + whatever() { this.he/*function_call*/llo(); } +} + +class SubBar extends Bar { + [|hello|]() {} +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_09_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_09_test.go new file mode 100644 index 0000000000..2f4304e95d --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_09_test.go @@ -0,0 +1,40 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_09(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hello (): void; +} + +class SubBar extends Bar { + hello() {} +} + +class Bar extends SuperBar { + hello() {} + + whatever() { + super.he/*function_call*/llo(); + super["hel/*element_access*/lo"](); + } +} + +class SuperBar extends MegaBar { + [|hello|]() {} +} + +class MegaBar implements Foo { + hello() {} +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call", "element_access") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_10_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_10_test.go new file mode 100644 index 0000000000..10a713a1f5 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_10_test.go @@ -0,0 +1,56 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_10(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface BaseFoo { + hello(): void; +} + +interface Foo extends BaseFoo { + aloha(): void; +} + +interface Bar { + hello(): void; + goodbye(): void; +} + +class FooImpl implements Foo { + [|hello|]() {/**FooImpl*/} + aloha() {} +} + +class BaseFooImpl implements BaseFoo { + hello() {/**BaseFooImpl*/} // Should not show up +} + +class BarImpl implements Bar { + [|hello|]() {/**BarImpl*/} + goodbye() {} +} + +class FooAndBarImpl implements Foo, Bar { + [|hello|]() {/**FooAndBarImpl*/} + aloha() {} + goodbye() {} +} + +function someFunction(x: Foo | Bar) { + x.he/*function_call0*/llo(); +} + +function anotherFunction(x: Foo & Bar) { + x.he/*function_call1*/llo(); +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call0", "function_call1") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_11_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_11_test.go new file mode 100644 index 0000000000..881446244f --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceMethod_11_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceMethod_11(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hel/*reference*/lo(): void; +} + +var x = { [|hello|]: () => {} }; +var y = (((({ [|hello|]: () => {} }))));` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceProperty_00_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceProperty_00_test.go new file mode 100644 index 0000000000..e1f0a87e26 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceProperty_00_test.go @@ -0,0 +1,32 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceProperty_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hello: number +} + +var bar: Foo = { [|hello|]: 5 }; + + +function whatever(x: Foo = { [|hello|]: 5 * 9 }) { + x.he/*reference*/llo +} + +class Bar { + x: Foo = { [|hello|]: 6 } + + constructor(public f: Foo = { [|hello|]: 7 } ) {} +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterfaceProperty_01_test.go b/internal/fourslash/tests/gen/goToImplementationInterfaceProperty_01_test.go new file mode 100644 index 0000000000..f7d65062f1 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterfaceProperty_01_test.go @@ -0,0 +1,25 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterfaceProperty_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { hello: number } + +class Bar implements Foo { + [|hello|] = 5 * 9; +} + +function whatever(foo: Foo) { + foo.he/*reference*/llo; +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_00_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_00_test.go new file mode 100644 index 0000000000..61ac5304fb --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_00_test.go @@ -0,0 +1,35 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { + hello: () => void +} + +interface Baz extends Foo {} + +var bar: Foo = [|{|"parts": ["(","object literal",")"], "kind": "interface"|}{ hello: helloImpl /**0*/ }|]; +var baz: Foo[] = [|[{ hello: helloImpl /**4*/ }]|]; + +function helloImpl () {} + +function whatever(x: Foo = [|{|"parts": ["(","object literal",")"], "kind": "interface"|}{ hello() {/**1*/} }|] ) { +} + +class Bar { + x: Foo = [|{ hello() {/*2*/} }|] + + constructor(public f: Foo = [|{ hello() {/**3*/} }|] ) {} +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_01_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_01_test.go new file mode 100644 index 0000000000..34a2f5845d --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_01_test.go @@ -0,0 +1,36 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { hello(): void } + +class [|SuperBar|] implements Foo { + hello () {} +} + +abstract class [|AbstractBar|] implements Foo { + abstract hello (): void; +} + +class [|Bar|] extends SuperBar { +} + +class [|NotAbstractBar|] extends AbstractBar { + hello () {} +} + +var x = new SuperBar(); +var y: SuperBar = new SuperBar(); +var z: AbstractBar = new NotAbstractBar();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_02_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_02_test.go new file mode 100644 index 0000000000..5fc61d7b96 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_02_test.go @@ -0,0 +1,38 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_02(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { hello: () => void } + +let x: number = 9; + +function createFoo(): Foo { + if (x === 2) { + return [|{ + hello() {} + }|]; + } + return [|{ + hello() {} + }|]; +} + +let createFoo2 = (): Foo => [|({hello() {}})|]; + +function createFooLike() { + return { + hello() {} + }; +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_03_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_03_test.go new file mode 100644 index 0000000000..d65535edab --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_03_test.go @@ -0,0 +1,19 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_03(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { hello: () => void } + +var x = [|{ hello: () => {} }|];` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_04_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_04_test.go new file mode 100644 index 0000000000..e6b134284d --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_04_test.go @@ -0,0 +1,30 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_04(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { + (a: number): void +} + +var bar: Foo = [|(a) => {/**0*/}|]; + +function whatever(x: Foo = [|(a) => {/**1*/}|] ) { +} + +class Bar { + x: Foo = [|(a) => {/**2*/}|] + + constructor(public f: Foo = [|function(a) {}|] ) {} +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_05_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_05_test.go new file mode 100644 index 0000000000..114836e474 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_05_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_05(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { + (a: number): void +} + +let bar2 = [|function(a) {}|]; +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_06_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_06_test.go new file mode 100644 index 0000000000..f2351c8317 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_06_test.go @@ -0,0 +1,24 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_06(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { + new (a: number): SomeOtherType; +} + +interface SomeOtherType {} + +let x: Foo = [|class { constructor (a: number) {} }|]; +let y = [|class { constructor (a: number) {} }|];` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_07_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_07_test.go new file mode 100644 index 0000000000..92bc2a63b1 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_07_test.go @@ -0,0 +1,40 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_07(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*interface_definition*/o { + hello (): void; +} + +interface Bar { + hello (): void; +} + +let x1: Foo = [|{ hello () { /**typeReference*/ } }|]; +let x2: () => Foo = [|(() => { hello () { /**functionType*/} })|]; +let x3: Foo | Bar = [|{ hello () { /**unionType*/} }|]; +let x4: Foo & (Foo & Bar) = [|{ hello () { /**intersectionType*/} }|]; +let x5: [Foo] = [|[{ hello () { /**tupleType*/} }]|]; +let x6: (Foo) = [|{ hello () { /**parenthesizedType*/} }|]; +let x7: (new() => Foo) = [|class { hello () { /**constructorType*/} }|]; +let x8: Foo[] = [|[{ hello () { /**arrayType*/} }]|]; +let x9: { y: Foo } = [|{ y: { hello () { /**typeLiteral*/} } }|]; +let x10 = [|{|"parts": ["(","anonymous local class",")"], "kind": "local class"|}class implements Foo { hello() {} }|] +let x11 = class [|{|"parts": ["(","local class",")"," ","C"], "kind": "local class"|}C|] implements Foo { hello() {} } + +// Should not do anything for type predicates +function isFoo(a: any): a is Foo { + return true; +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "interface_definition") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_08_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_08_test.go new file mode 100644 index 0000000000..bbd6760eec --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_08_test.go @@ -0,0 +1,31 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_08(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Base { + hello (): void; +} + +interface A extends Base {} +interface B extends C, A {} +interface C extends B, A {} + +class X implements B { + [|hello|]() {} +} + +function someFunction(d : A) { + d.he/*function_call*/llo(); +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_09_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_09_test.go new file mode 100644 index 0000000000..f3f826a333 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_09_test.go @@ -0,0 +1,21 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_09(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @Filename: def.d.ts +export interface Interface { P: number } +// @Filename: ref.ts +import { Interface } from "./def"; +const c: I/*ref*/nterface = [|{ P: 2 }|];` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "ref") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInterface_10_test.go b/internal/fourslash/tests/gen/goToImplementationInterface_10_test.go new file mode 100644 index 0000000000..d48e7fc862 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInterface_10_test.go @@ -0,0 +1,28 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInterface_10(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @Filename: /a.ts +interface /*def*/A { + foo: boolean; +} +interface [|B|] extends A { + bar: boolean; +} +export class [|C|] implements B { + foo = true; + bar = true; +} +export class [|D|] extends C { }` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "def") +} diff --git a/internal/fourslash/tests/gen/goToImplementationInvalid_test.go b/internal/fourslash/tests/gen/goToImplementationInvalid_test.go new file mode 100644 index 0000000000..69b49f0fd4 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationInvalid_test.go @@ -0,0 +1,19 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationInvalid(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `var x1 = 50/*0*/0; +var x2 = "hel/*1*/lo"; +/*2*/` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "0", "1", "2") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_00_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_00_test.go new file mode 100644 index 0000000000..125626b1db --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_00_test.go @@ -0,0 +1,18 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `he/*function_call*/llo(); +function [|hello|]() {}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_01_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_01_test.go new file mode 100644 index 0000000000..96e14a25cf --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_01_test.go @@ -0,0 +1,18 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `const [|hello|] = function() {}; +he/*function_call*/llo();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_02_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_02_test.go new file mode 100644 index 0000000000..ebb077701b --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_02_test.go @@ -0,0 +1,20 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_02(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `const x = { [|hello|]: () => {} }; + +x.he/*function_call*/llo(); +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_03_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_03_test.go new file mode 100644 index 0000000000..ed43e627ca --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_03_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_03(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `let [|he/*local_var*/llo|] = {}; + +x.hello(); + +hello = {}; +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "local_var") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_04_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_04_test.go new file mode 100644 index 0000000000..ea91053dea --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_04_test.go @@ -0,0 +1,20 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_04(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `function [|he/*local_var*/llo|]() {} + +hello(); +` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "local_var") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_05_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_05_test.go new file mode 100644 index 0000000000..ec96c39051 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_05_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_05(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `class Bar { + public hello() {} +} + +var [|someVar|] = new Bar(); +someVa/*reference*/r.hello();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_06_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_06_test.go new file mode 100644 index 0000000000..b00ee92098 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_06_test.go @@ -0,0 +1,18 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_06(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `declare var [|someVar|]: string; +someVa/*reference*/r` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_07_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_07_test.go new file mode 100644 index 0000000000..737acf11bf --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_07_test.go @@ -0,0 +1,18 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_07(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `declare function [|someFunction|](): () => void; +someFun/*reference*/ction();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationLocal_08_test.go b/internal/fourslash/tests/gen/goToImplementationLocal_08_test.go new file mode 100644 index 0000000000..dcede3ae1e --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationLocal_08_test.go @@ -0,0 +1,18 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationLocal_08(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `declare function [|someFunction|](): () => void; +someFun/*reference*/ction();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationNamespace_00_test.go b/internal/fourslash/tests/gen/goToImplementationNamespace_00_test.go new file mode 100644 index 0000000000..9bdd97d9f2 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationNamespace_00_test.go @@ -0,0 +1,26 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationNamespace_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `namespace /*implementation0*/Foo { + export function hello() {} +} + +module /*implementation1*/Bar { + export function sure() {} +} + +let x = Fo/*reference0*/o; +let y = Ba/*reference1*/r;` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference0", "reference1") +} diff --git a/internal/fourslash/tests/gen/goToImplementationNamespace_01_test.go b/internal/fourslash/tests/gen/goToImplementationNamespace_01_test.go new file mode 100644 index 0000000000..414b997363 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationNamespace_01_test.go @@ -0,0 +1,21 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationNamespace_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `namespace Foo { + export function [|hello|]() {} +} + +Foo.hell/*reference*/o();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationNamespace_02_test.go b/internal/fourslash/tests/gen/goToImplementationNamespace_02_test.go new file mode 100644 index 0000000000..0eb0f76eba --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationNamespace_02_test.go @@ -0,0 +1,21 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationNamespace_02(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `module Foo { + export function [|hello|]() {} +} + +Foo.hell/*reference*/o();` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationNamespace_03_test.go b/internal/fourslash/tests/gen/goToImplementationNamespace_03_test.go new file mode 100644 index 0000000000..f10f737c76 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationNamespace_03_test.go @@ -0,0 +1,37 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationNamespace_03(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `namespace Foo { + export interface Bar { + hello(): void; + } + + class [|BarImpl|] implements Bar { + hello() {} + } +} + +class [|Baz|] implements Foo.Bar { + hello() {} +} + +var someVar1 : Foo.Bar = [|{ hello: () => {/**1*/} }|]; + +var someVar2 = [|{ hello: () => {/**2*/} }|]; + +function whatever(x: Foo.Ba/*reference*/r) { + +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationNamespace_04_test.go b/internal/fourslash/tests/gen/goToImplementationNamespace_04_test.go new file mode 100644 index 0000000000..24bdd2c2e9 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationNamespace_04_test.go @@ -0,0 +1,37 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationNamespace_04(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `module Foo { + export interface Bar { + hello(): void; + } + + class [|BarImpl|] implements Bar { + hello() {} + } +} + +class [|Baz|] implements Foo.Bar { + hello() {} +} + +var someVar1 : Foo.Bar = [|{ hello: () => {/**1*/} }|]; + +var someVar2 = [|{ hello: () => {/**2*/} }|]; + +function whatever(x: Foo.Ba/*reference*/r) { + +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationNamespace_05_test.go b/internal/fourslash/tests/gen/goToImplementationNamespace_05_test.go new file mode 100644 index 0000000000..7fe5580ef5 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationNamespace_05_test.go @@ -0,0 +1,28 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationNamespace_05(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `namespace /*implementation0*/Foo./*implementation2*/Baz { + export function hello() {} +} + +module /*implementation1*/Bar./*implementation3*/Baz { + export function sure() {} +} + +let x = Fo/*reference0*/o; +let y = Ba/*reference1*/r; +let x1 = Foo.B/*reference2*/az; +let y1 = Bar.B/*reference3*/az;` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference0", "reference1", "reference2", "reference3") +} diff --git a/internal/fourslash/tests/gen/goToImplementationNamespace_06_test.go b/internal/fourslash/tests/gen/goToImplementationNamespace_06_test.go new file mode 100644 index 0000000000..e878b1bc54 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationNamespace_06_test.go @@ -0,0 +1,22 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationNamespace_06(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `namespace [|F/*declaration*/oo|] { + declare function hello(): void; +} + + +let x: typeof Foo = [|{ hello() {} }|];` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "declaration") +} diff --git a/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_00_test.go b/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_00_test.go new file mode 100644 index 0000000000..04a33c4828 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_00_test.go @@ -0,0 +1,47 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationShorthandPropertyAssignment_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + someFunction(): void; +} + +interface FooConstructor { + new (): Foo +} + +interface Bar { + Foo: FooConstructor; +} + +var x = class /*classExpression*/Foo { + createBarInClassExpression(): Bar { + return { + Fo/*classExpressionRef*/o + }; + } + + someFunction() {} +} + +class /*declaredClass*/Foo { + +} + +function createBarUsingClassDeclaration(): Bar { + return { + Fo/*declaredClassRef*/o + }; +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "classExpressionRef", "declaredClassRef") +} diff --git a/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_01_test.go b/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_01_test.go new file mode 100644 index 0000000000..df0fbba559 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_01_test.go @@ -0,0 +1,57 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationShorthandPropertyAssignment_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + someFunction(): void; +} + +interface FooConstructor { + new (): Foo +} + +interface Bar { + Foo: FooConstructor; +} + +// Class expression that gets used in a bar implementation +var x = class [|Foo|] { + createBarInClassExpression(): Bar { + return { + Foo + }; + } + + someFunction() {} +}; + +// Class declaration that gets used in a bar implementation. This class has multiple definitions +// (the class declaration and the interface above), but we only want the class returned +class [|Foo|] { + +} + +function createBarUsingClassDeclaration(): Bar { + return { + Foo + }; +} + +// Class expression that does not get used in a bar implementation +var y = class Foo { + someFunction() {} +}; + +createBarUsingClassDeclaration().Fo/*reference*/o;` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "reference") +} diff --git a/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_02_test.go b/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_02_test.go new file mode 100644 index 0000000000..dc118f3744 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationShorthandPropertyAssignment_02_test.go @@ -0,0 +1,31 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationShorthandPropertyAssignment_02(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Foo { + hello(): void; +} + +function createFoo(): Foo { + return { + hello + }; + + function [|hello|]() {} +} + +function whatever(x: Foo) { + x.h/*function_call*/ello(); +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "function_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationSuper_00_test.go b/internal/fourslash/tests/gen/goToImplementationSuper_00_test.go new file mode 100644 index 0000000000..61c7bd6dfe --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationSuper_00_test.go @@ -0,0 +1,25 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationSuper_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `class [|Foo|] { + constructor() {} +} + +class Bar extends Foo { + constructor() { + su/*super_call*/per(); + } +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "super_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationSuper_01_test.go b/internal/fourslash/tests/gen/goToImplementationSuper_01_test.go new file mode 100644 index 0000000000..128287e4cb --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationSuper_01_test.go @@ -0,0 +1,25 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationSuper_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `class [|Foo|] { + hello() {} +} + +class Bar extends Foo { + hello() { + sup/*super_call*/er.hello(); + } +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "super_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationThis_00_test.go b/internal/fourslash/tests/gen/goToImplementationThis_00_test.go new file mode 100644 index 0000000000..df43e906a3 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationThis_00_test.go @@ -0,0 +1,23 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationThis_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `class [|Bar|] extends Foo { + hello() { + thi/*this_call*/s.whatever(); + } + + whatever() {} +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "this_call") +} diff --git a/internal/fourslash/tests/gen/goToImplementationThis_01_test.go b/internal/fourslash/tests/gen/goToImplementationThis_01_test.go new file mode 100644 index 0000000000..37ac056763 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationThis_01_test.go @@ -0,0 +1,21 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationThis_01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `class [|Bar|] extends Foo { + hello(): th/*this_type*/is { + return this; + } +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "this_type") +} diff --git a/internal/fourslash/tests/gen/goToImplementationTypeAlias_00_test.go b/internal/fourslash/tests/gen/goToImplementationTypeAlias_00_test.go new file mode 100644 index 0000000000..914878ce98 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementationTypeAlias_00_test.go @@ -0,0 +1,21 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementationTypeAlias_00(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @Filename: def.d.ts +export type TypeAlias = { P: number } +// @Filename: ref.ts +import { TypeAlias } from "./def"; +const c: T/*ref*/ypeAlias = [|{ P: 2 }|];` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "ref") +} diff --git a/internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go b/internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go new file mode 100644 index 0000000000..3b520e9c75 --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go @@ -0,0 +1,30 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementation_inDifferentFiles(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @Filename: /home/src/workspaces/project/bar.ts +import {Foo} from './foo' + +class [|A|] implements Foo { + func() {} +} + +class [|B|] implements Foo { + func() {} +} +// @Filename: /home/src/workspaces/project/foo.ts +export interface /**/Foo { + func(); +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "") +} diff --git a/internal/fourslash/tests/gen/goToImplementation_satisfies_test.go b/internal/fourslash/tests/gen/goToImplementation_satisfies_test.go new file mode 100644 index 0000000000..fae6a4f70d --- /dev/null +++ b/internal/fourslash/tests/gen/goToImplementation_satisfies_test.go @@ -0,0 +1,24 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestGoToImplementation_satisfies(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @filename: /a.ts +interface /*def*/I { + foo: string; +} + +function f() { + const foo = { foo: '' } satisfies [|I|]; +}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "def") +} diff --git a/internal/fourslash/tests/gen/implementation01_test.go b/internal/fourslash/tests/gen/implementation01_test.go new file mode 100644 index 0000000000..4239432c55 --- /dev/null +++ b/internal/fourslash/tests/gen/implementation01_test.go @@ -0,0 +1,18 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestImplementation01(t *testing.T) { + t.Parallel() + + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `interface Fo/*1*/o {} +class /*2*/Bar implements Foo {}` + f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.VerifyBaselineGoToImplementation(t, "1") +} From 603b515ae45f11fa1441c0f8d50c1476666ae235 Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Mon, 17 Nov 2025 11:59:30 -0800 Subject: [PATCH 02/12] refactor baseline command names --- internal/fourslash/baselineutil.go | 45 ++++++++++++++++++++---------- internal/fourslash/fourslash.go | 41 +++++++++++++-------------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 5754ca0f42..ec068c9435 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -20,7 +20,24 @@ import ( "github.com/microsoft/typescript-go/internal/vfs" ) -func (f *FourslashTest) addResultToBaseline(t *testing.T, command string, actual string) { +const ( + autoImportsCmd baselineCommand = "Auto Imports" + documentHighlightsCmd baselineCommand = "documentHighlights" + findAllReferencesCmd baselineCommand = "findAllReferences" + goToDefinitionCmd baselineCommand = "goToDefinition" + goToImplementationCmd baselineCommand = "goToImplementation" + goToTypeDefinitionCmd baselineCommand = "goToType" + inlayHintsCmd baselineCommand = "Inlay Hints" + nonSuggestionDiagnosticsCmd baselineCommand = "Syntax and Semantic Diagnostics" + quickInfoCmd baselineCommand = "QuickInfo" + renameCmd baselineCommand = "findRenameLocations" + signatureHelpCmd baselineCommand = "SignatureHelp" + smartSelectionCmd baselineCommand = "Smart Selection" +) + +type baselineCommand string + +func (f *FourslashTest) addResultToBaseline(t *testing.T, command baselineCommand, actual string) { b, ok := f.baselines[command] if !ok { f.baselines[command] = &strings.Builder{} @@ -29,10 +46,10 @@ func (f *FourslashTest) addResultToBaseline(t *testing.T, command string, actual if b.Len() != 0 { b.WriteString("\n\n\n\n") } - b.WriteString(`// === ` + command + " ===\n" + actual) + b.WriteString(`// === ` + string(command) + " ===\n" + actual) } -func (f *FourslashTest) writeToBaseline(command string, content string) { +func (f *FourslashTest) writeToBaseline(command baselineCommand, content string) { b, ok := f.baselines[command] if !ok { f.baselines[command] = &strings.Builder{} @@ -41,35 +58,35 @@ func (f *FourslashTest) writeToBaseline(command string, content string) { b.WriteString(content) } -func getBaselineFileName(t *testing.T, command string) string { +func getBaselineFileName(t *testing.T, command baselineCommand) string { return getBaseFileNameFromTest(t) + "." + getBaselineExtension(command) } -func getBaselineExtension(command string) string { +func getBaselineExtension(command baselineCommand) string { switch command { - case "QuickInfo", "SignatureHelp", "Smart Selection", "Inlay Hints", "Syntax and Semantic Diagnostics": + case quickInfoCmd, signatureHelpCmd, smartSelectionCmd, inlayHintsCmd, nonSuggestionDiagnosticsCmd: return "baseline" - case "Auto Imports": + case autoImportsCmd: return "baseline.md" default: return "baseline.jsonc" } } -func getBaselineOptions(command string, testPath string) baseline.Options { - subfolder := "fourslash/" + normalizeCommandName(command) +func getBaselineOptions(command baselineCommand, testPath string) baseline.Options { + subfolder := "fourslash/" + normalizeCommandName(string(command)) if !isSubmoduleTest(testPath) { return baseline.Options{ Subfolder: subfolder, } } switch command { - case "Smart Selection": + case smartSelectionCmd: return baseline.Options{ Subfolder: subfolder, IsSubmodule: true, } - case "findRenameLocations": + case renameCmd: return baseline.Options{ Subfolder: subfolder, IsSubmodule: true, @@ -98,7 +115,7 @@ func getBaselineOptions(command string, testPath string) baseline.Options { matches := commandPrefix.FindStringSubmatch(line) if len(matches) > 0 { commandName := matches[1] - if commandName == command { + if commandName == string(command) { isInCommand = true } else { isInCommand = false @@ -112,7 +129,7 @@ func getBaselineOptions(command string, testPath string) baseline.Options { return strings.Join(commandLines, "\n") }, } - case "Inlay Hints": + case inlayHintsCmd: return baseline.Options{ Subfolder: subfolder, IsSubmodule: true, @@ -131,7 +148,7 @@ func getBaselineOptions(command string, testPath string) baseline.Options { matches := commandPrefix.FindStringSubmatch(line) if len(matches) > 0 { commandName := matches[1] - if commandName == command { + if commandName == string(command) { isInCommand = true } else { isInCommand = false diff --git a/internal/fourslash/fourslash.go b/internal/fourslash/fourslash.go index 2760968fcb..77d124cfe5 100644 --- a/internal/fourslash/fourslash.go +++ b/internal/fourslash/fourslash.go @@ -43,7 +43,7 @@ type FourslashTest struct { vfs vfs.FS testData *TestData // !!! consolidate test files from test data and script info - baselines map[string]*strings.Builder + baselines map[baselineCommand]*strings.Builder rangesByText *collections.MultiMap[string, *RangeMarker] scriptInfos map[string]*scriptInfo @@ -218,7 +218,7 @@ func NewFourslash(t *testing.T, capabilities *lsproto.ClientCapabilities, conten vfs: fs, scriptInfos: scriptInfos, converters: converters, - baselines: make(map[string]*strings.Builder), + baselines: make(map[baselineCommand]*strings.Builder), } // !!! temporary; remove when we have `handleDidChangeConfiguration`/implicit project config support @@ -1249,7 +1249,7 @@ func (f *FourslashTest) VerifyBaselineFindAllReferences( } } - f.addResultToBaseline(t, "findAllReferences", f.getBaselineForLocationsWithFileContents(*result.Locations, baselineFourslashLocationsOptions{ + f.addResultToBaseline(t, findAllReferencesCmd, f.getBaselineForLocationsWithFileContents(*result.Locations, baselineFourslashLocationsOptions{ marker: markerOrRange, markerName: "/*FIND ALL REFS*/", })) @@ -1317,7 +1317,7 @@ func (f *FourslashTest) VerifyBaselineGoToDefinition( } } - f.addResultToBaseline(t, "goToDefinition", f.getBaselineForLocationsWithFileContents(resultAsLocations, baselineFourslashLocationsOptions{ + f.addResultToBaseline(t, goToDefinitionCmd, f.getBaselineForLocationsWithFileContents(resultAsLocations, baselineFourslashLocationsOptions{ marker: markerOrRange, markerName: "/*GOTO DEF*/", additionalLocation: additionalLocation, @@ -1372,7 +1372,7 @@ func (f *FourslashTest) VerifyBaselineGoToTypeDefinition( }) } - f.addResultToBaseline(t, "goToType", f.getBaselineForLocationsWithFileContents(resultAsLocations, baselineFourslashLocationsOptions{ + f.addResultToBaseline(t, goToTypeDefinitionCmd, f.getBaselineForLocationsWithFileContents(resultAsLocations, baselineFourslashLocationsOptions{ marker: markerOrRange, markerName: "/*GOTO TYPE*/", })) @@ -1435,9 +1435,9 @@ func (f *FourslashTest) VerifyBaselineHover(t *testing.T) { return result } - f.addResultToBaseline(t, "QuickInfo", annotateContentWithTooltips(t, f, markersAndItems, "quickinfo", getRange, getTooltipLines)) + f.addResultToBaseline(t, quickInfoCmd, annotateContentWithTooltips(t, f, markersAndItems, "quickinfo", getRange, getTooltipLines)) if jsonStr, err := core.StringifyJson(markersAndItems, "", " "); err == nil { - f.writeToBaseline("QuickInfo", jsonStr) + f.writeToBaseline(quickInfoCmd, jsonStr) } else { t.Fatalf("Failed to stringify markers and items for baseline: %v", err) } @@ -1550,9 +1550,9 @@ func (f *FourslashTest) VerifyBaselineSignatureHelp(t *testing.T) { return result } - f.addResultToBaseline(t, "SignatureHelp", annotateContentWithTooltips(t, f, markersAndItems, "signaturehelp", getRange, getTooltipLines)) + f.addResultToBaseline(t, signatureHelpCmd, annotateContentWithTooltips(t, f, markersAndItems, "signaturehelp", getRange, getTooltipLines)) if jsonStr, err := core.StringifyJson(markersAndItems, "", " "); err == nil { - f.writeToBaseline("SignatureHelp", jsonStr) + f.writeToBaseline(signatureHelpCmd, jsonStr) } else { t.Fatalf("Failed to stringify markers and items for baseline: %v", err) } @@ -1698,7 +1698,7 @@ func (f *FourslashTest) VerifyBaselineSelectionRanges(t *testing.T) { selectionRange = selectionRange.Parent } } - f.addResultToBaseline(t, "Smart Selection", strings.TrimSuffix(result.String(), "\n")) + f.addResultToBaseline(t, smartSelectionCmd, strings.TrimSuffix(result.String(), "\n")) } func (f *FourslashTest) VerifyBaselineDocumentHighlights( @@ -1771,7 +1771,7 @@ func (f *FourslashTest) verifyBaselineDocumentHighlights( } // Add result to baseline - f.addResultToBaseline(t, "documentHighlights", f.getBaselineForLocationsWithFileContents(spans, baselineFourslashLocationsOptions{ + f.addResultToBaseline(t, documentHighlightsCmd, f.getBaselineForLocationsWithFileContents(spans, baselineFourslashLocationsOptions{ marker: markerOrRange, markerName: "/*HIGHLIGHTS*/", })) @@ -2165,7 +2165,7 @@ func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames t.Fatalf(prefix+"Unexpected response type for completion request for autoimports: %T", resMsg.AsResponse().Result) } - f.writeToBaseline("Auto Imports", "// === Auto Imports === \n") + f.writeToBaseline(autoImportsCmd, "// === Auto Imports === \n") fileContent, ok := f.vfs.ReadFile(f.activeFilename) if !ok { @@ -2175,7 +2175,7 @@ func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames marker := f.testData.MarkerPositions[markerName] ext := strings.TrimPrefix(tspath.GetAnyExtensionFromPath(f.activeFilename, nil, true), ".") lang := core.IfElse(ext == "mts" || ext == "cts", "ts", ext) - f.writeToBaseline("Auto Imports", (codeFence( + f.writeToBaseline(autoImportsCmd, (codeFence( lang, "// @FileName: "+f.activeFilename+"\n"+fileContent[:marker.Position]+"/*"+markerName+"*/"+fileContent[marker.Position:], ))) @@ -2187,7 +2187,7 @@ func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames var list []*lsproto.CompletionItem if result.Items == nil || len(*result.Items) == 0 { if result.List == nil || result.List.Items == nil || len(result.List.Items) == 0 { - f.writeToBaseline("Auto Imports", "no autoimport completions found"+"\n\n") + f.writeToBaseline(autoImportsCmd, "no autoimport completions found"+"\n\n") continue } @@ -2233,7 +2233,7 @@ func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames for _, change := range allChanges { newFileContent = newFileContent[:converters.LineAndCharacterToPosition(currentFile, change.Range.Start)] + change.NewText + newFileContent[converters.LineAndCharacterToPosition(currentFile, change.Range.End):] } - f.writeToBaseline("Auto Imports", codeFence(lang, newFileContent)+"\n\n") + f.writeToBaseline(autoImportsCmd, codeFence(lang, newFileContent)+"\n\n") } } } @@ -2348,10 +2348,7 @@ func (f *FourslashTest) verifyBaselineRename( baselineResult = baselineFileContent } - f.addResultToBaseline(t, - "findRenameLocations", - baselineResult, - ) + f.addResultToBaseline(t, renameCmd, baselineResult) } } @@ -2502,7 +2499,7 @@ func (f *FourslashTest) VerifyBaselineInlayHints( annotations = append(annotations, "=== No inlay hints ===") } - f.addResultToBaseline(t, "Inlay Hints", strings.Join(annotations, "\n\n")) + f.addResultToBaseline(t, inlayHintsCmd, strings.Join(annotations, "\n\n")) } func (f *FourslashTest) VerifyDiagnostics(t *testing.T, expected []*lsproto.Diagnostic) { @@ -2588,7 +2585,7 @@ func (f *FourslashTest) VerifyBaselineNonSuggestionDiagnostics(t *testing.T) { return strings.Compare(a.UnitName, b.UnitName) }) result := tsbaseline.GetErrorBaseline(t, files, diagnostics, compareDiagnostics, false /*pretty*/) - f.addResultToBaseline(t, "Syntax and Semantic Diagnostics", result) + f.addResultToBaseline(t, nonSuggestionDiagnosticsCmd, result) } type fourslashDiagnostic struct { @@ -2813,7 +2810,7 @@ func (f *FourslashTest) VerifyBaselineGoToImplementation(t *testing.T, markerNam } }) } - f.addResultToBaseline(t, "goToImplementation", f.getBaselineForLocationsWithFileContents( + f.addResultToBaseline(t, goToImplementationCmd, f.getBaselineForLocationsWithFileContents( resultAsLocations, baselineFourslashLocationsOptions{ marker: markerOrRange, From b9acc5bd72e8d98be5904752dcc982c2c3775aca Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Mon, 17 Nov 2025 12:17:53 -0800 Subject: [PATCH 03/12] initial diff for go to defs --- internal/fourslash/baselineutil.go | 46 + ...eclarationMapGoToDefinition.baseline.jsonc | 0 ...ationMapGoToDefinition.baseline.jsonc.diff | 11 + ...efinitionRelativeSourceRoot.baseline.jsonc | 0 ...tionRelativeSourceRoot.baseline.jsonc.diff | 11 + ...nSameNameDifferentDirectory.baseline.jsonc | 0 ...NameDifferentDirectory.baseline.jsonc.diff | 28 + ...arationMapsOutOfDateMapping.baseline.jsonc | 0 ...onMapsOutOfDateMapping.baseline.jsonc.diff | 13 + .../goToDefinition/definition.baseline.jsonc | 0 .../definition.baseline.jsonc.diff | 10 + .../definition01.baseline.jsonc | 0 .../definition01.baseline.jsonc.diff | 10 + .../definitionNameOnEnumMember.baseline.jsonc | 0 ...nitionNameOnEnumMember.baseline.jsonc.diff | 13 + ...findAllRefsForDefaultExport.baseline.jsonc | 0 ...llRefsForDefaultExport.baseline.jsonc.diff | 2 + ...itionAcrossMultipleProjects.baseline.jsonc | 0 ...AcrossMultipleProjects.baseline.jsonc.diff | 2 + .../goToDefinitionAlias.baseline.jsonc | 0 .../goToDefinitionAlias.baseline.jsonc.diff | 29 + .../goToDefinitionAmbiants.baseline.jsonc | 0 ...goToDefinitionAmbiants.baseline.jsonc.diff | 80 + ...itionApparentTypeProperties.baseline.jsonc | 0 ...ApparentTypeProperties.baseline.jsonc.diff | 11 + .../goToDefinitionAwait1.baseline.jsonc | 0 .../goToDefinitionAwait1.baseline.jsonc.diff | 11 + .../goToDefinitionAwait2.baseline.jsonc | 0 .../goToDefinitionAwait3.baseline.jsonc | 0 .../goToDefinitionAwait3.baseline.jsonc.diff | 15 + .../goToDefinitionAwait4.baseline.jsonc | 0 .../goToDefinitionAwait4.baseline.jsonc.diff | 11 + .../goToDefinitionBuiltInTypes.baseline.jsonc | 0 ...goToDefinitionBuiltInValues.baseline.jsonc | 0 ...tionCSSPatternAmbientModule.baseline.jsonc | 0 ...SSPatternAmbientModule.baseline.jsonc.diff | 10 + ...DefinitionClassConstructors.baseline.jsonc | 0 ...itionClassConstructors.baseline.jsonc.diff | 42 + ...DefinitionClassStaticBlocks.baseline.jsonc | 0 ...itionClassStaticBlocks.baseline.jsonc.diff | 63 + ...structorOfClassExpression01.baseline.jsonc | 0 ...torOfClassExpression01.baseline.jsonc.diff | 68 + ...lassIsPrecededByNamespace01.baseline.jsonc | 0 ...sPrecededByNamespace01.baseline.jsonc.diff | 10 + ...initionConstructorOverloads.baseline.jsonc | 0 ...onConstructorOverloads.baseline.jsonc.diff | 49 + .../goToDefinitionDecorator.baseline.jsonc | 0 ...oToDefinitionDecorator.baseline.jsonc.diff | 11 + ...efinitionDecoratorOverloads.baseline.jsonc | 0 ...tionDecoratorOverloads.baseline.jsonc.diff | 11 + ...initionDestructuredRequire1.baseline.jsonc | 0 ...onDestructuredRequire1.baseline.jsonc.diff | 12 + ...initionDestructuredRequire2.baseline.jsonc | 0 ...onDestructuredRequire2.baseline.jsonc.diff | 13 + ...goToDefinitionDifferentFile.baseline.jsonc | 0 ...efinitionDifferentFile.baseline.jsonc.diff | 80 + ...tionDifferentFileIndirectly.baseline.jsonc | 0 ...ifferentFileIndirectly.baseline.jsonc.diff | 80 + ...oToDefinitionDynamicImport1.baseline.jsonc | 0 ...finitionDynamicImport1.baseline.jsonc.diff | 20 + ...oToDefinitionDynamicImport2.baseline.jsonc | 0 ...finitionDynamicImport2.baseline.jsonc.diff | 2 + ...oToDefinitionDynamicImport3.baseline.jsonc | 0 ...finitionDynamicImport3.baseline.jsonc.diff | 9 + ...oToDefinitionDynamicImport4.baseline.jsonc | 0 ...finitionDynamicImport4.baseline.jsonc.diff | 9 + ...goToDefinitionExpandoClass1.baseline.jsonc | 0 ...efinitionExpandoClass1.baseline.jsonc.diff | 2 + ...goToDefinitionExpandoClass2.baseline.jsonc | 0 ...efinitionExpandoClass2.baseline.jsonc.diff | 2 + ...initionExpandoElementAccess.baseline.jsonc | 0 ...onExpandoElementAccess.baseline.jsonc.diff | 8 + ...efinitionExternalModuleName.baseline.jsonc | 0 ...tionExternalModuleName.baseline.jsonc.diff | 10 + ...finitionExternalModuleName2.baseline.jsonc | 0 ...ionExternalModuleName2.baseline.jsonc.diff | 12 + ...finitionExternalModuleName3.baseline.jsonc | 0 ...ionExternalModuleName3.baseline.jsonc.diff | 2 + ...finitionExternalModuleName4.baseline.jsonc | 0 ...finitionExternalModuleName5.baseline.jsonc | 0 ...ionExternalModuleName5.baseline.jsonc.diff | 9 + ...finitionExternalModuleName6.baseline.jsonc | 0 ...ionExternalModuleName6.baseline.jsonc.diff | 2 + ...finitionExternalModuleName7.baseline.jsonc | 0 ...ionExternalModuleName7.baseline.jsonc.diff | 2 + ...finitionExternalModuleName8.baseline.jsonc | 0 ...ionExternalModuleName8.baseline.jsonc.diff | 2 + ...finitionExternalModuleName9.baseline.jsonc | 0 ...ionExternalModuleName9.baseline.jsonc.diff | 2 + ...DefinitionFunctionOverloads.baseline.jsonc | 0 ...itionFunctionOverloads.baseline.jsonc.diff | 35 + ...ionFunctionOverloadsInClass.baseline.jsonc | 0 ...nctionOverloadsInClass.baseline.jsonc.diff | 32 + .../goToDefinitionFunctionType.baseline.jsonc | 0 ...DefinitionFunctionType.baseline.jsonc.diff | 48 + ...finitionImplicitConstructor.baseline.jsonc | 0 ...ionImplicitConstructor.baseline.jsonc.diff | 10 + .../goToDefinitionImport1.baseline.jsonc | 0 .../goToDefinitionImport1.baseline.jsonc.diff | 10 + .../goToDefinitionImport2.baseline.jsonc | 0 .../goToDefinitionImport3.baseline.jsonc | 0 ...goToDefinitionImportedNames.baseline.jsonc | 0 ...efinitionImportedNames.baseline.jsonc.diff | 2 + ...ToDefinitionImportedNames10.baseline.jsonc | 0 ...initionImportedNames10.baseline.jsonc.diff | 16 + ...ToDefinitionImportedNames11.baseline.jsonc | 0 ...initionImportedNames11.baseline.jsonc.diff | 16 + ...oToDefinitionImportedNames2.baseline.jsonc | 0 ...finitionImportedNames2.baseline.jsonc.diff | 2 + ...oToDefinitionImportedNames3.baseline.jsonc | 0 ...finitionImportedNames3.baseline.jsonc.diff | 23 + ...oToDefinitionImportedNames4.baseline.jsonc | 0 ...finitionImportedNames4.baseline.jsonc.diff | 2 + ...oToDefinitionImportedNames5.baseline.jsonc | 0 ...finitionImportedNames5.baseline.jsonc.diff | 2 + ...oToDefinitionImportedNames6.baseline.jsonc | 0 ...finitionImportedNames6.baseline.jsonc.diff | 2 + ...oToDefinitionImportedNames7.baseline.jsonc | 0 ...finitionImportedNames7.baseline.jsonc.diff | 2 + ...oToDefinitionImportedNames8.baseline.jsonc | 0 ...finitionImportedNames8.baseline.jsonc.diff | 2 + ...oToDefinitionImportedNames9.baseline.jsonc | 0 ...finitionImportedNames9.baseline.jsonc.diff | 2 + .../goToDefinitionImports.baseline.jsonc | 0 .../goToDefinitionImports.baseline.jsonc.diff | 41 + ...finitionInMemberDeclaration.baseline.jsonc | 0 ...ionInMemberDeclaration.baseline.jsonc.diff | 91 + ...oToDefinitionInTypeArgument.baseline.jsonc | 0 ...finitionInTypeArgument.baseline.jsonc.diff | 25 + ...oToDefinitionIndexSignature.baseline.jsonc | 0 ...finitionIndexSignature.baseline.jsonc.diff | 40 + ...ToDefinitionIndexSignature2.baseline.jsonc | 0 .../goToDefinitionInstanceof1.baseline.jsonc | 0 ...oDefinitionInstanceof1.baseline.jsonc.diff | 2 + .../goToDefinitionInstanceof2.baseline.jsonc | 0 ...oDefinitionInstanceof2.baseline.jsonc.diff | 2 + ...tionInterfaceAfterImplement.baseline.jsonc | 0 ...nterfaceAfterImplement.baseline.jsonc.diff | 16 + ...ToDefinitionJsDocImportTag1.baseline.jsonc | 0 ...initionJsDocImportTag1.baseline.jsonc.diff | 12 + ...ToDefinitionJsDocImportTag2.baseline.jsonc | 0 ...ToDefinitionJsDocImportTag3.baseline.jsonc | 0 ...ToDefinitionJsDocImportTag4.baseline.jsonc | 0 ...initionJsDocImportTag4.baseline.jsonc.diff | 2 + ...ToDefinitionJsDocImportTag5.baseline.jsonc | 0 ...initionJsDocImportTag5.baseline.jsonc.diff | 2 + ...ToDefinitionJsModuleExports.baseline.jsonc | 0 ...initionJsModuleExports.baseline.jsonc.diff | 20 + .../goToDefinitionJsModuleName.baseline.jsonc | 0 ...DefinitionJsModuleName.baseline.jsonc.diff | 10 + ...ionJsModuleNameAtImportName.baseline.jsonc | 0 ...ModuleNameAtImportName.baseline.jsonc.diff | 75 + .../goToDefinitionJsxCall.baseline.jsonc | 0 .../goToDefinitionJsxCall.baseline.jsonc.diff | 21 + .../goToDefinitionJsxNotSet.baseline.jsonc | 0 ...oToDefinitionJsxNotSet.baseline.jsonc.diff | 10 + .../goToDefinitionLabels.baseline.jsonc | 0 .../goToDefinitionLabels.baseline.jsonc.diff | 29 + .../goToDefinitionMember.baseline.jsonc | 0 .../goToDefinitionMember.baseline.jsonc.diff | 9 + .../goToDefinitionMetaProperty.baseline.jsonc | 0 ...DefinitionMetaProperty.baseline.jsonc.diff | 11 + ...ToDefinitionMethodOverloads.baseline.jsonc | 0 ...initionMethodOverloads.baseline.jsonc.diff | 67 + .../goToDefinitionModifiers.baseline.jsonc | 0 ...oToDefinitionModifiers.baseline.jsonc.diff | 200 + ...finitionMultipleDefinitions.baseline.jsonc | 0 ...ionMultipleDefinitions.baseline.jsonc.diff | 11 + ...NewExpressionTargetNotClass.baseline.jsonc | 0 ...pressionTargetNotClass.baseline.jsonc.diff | 11 + ...indingElementPropertyName01.baseline.jsonc | 0 ...gElementPropertyName01.baseline.jsonc.diff | 2 + ...tionObjectLiteralProperties.baseline.jsonc | 0 ...bjectLiteralProperties.baseline.jsonc.diff | 80 + ...ionObjectLiteralProperties1.baseline.jsonc | 0 ...jectLiteralProperties1.baseline.jsonc.diff | 11 + .../goToDefinitionObjectSpread.baseline.jsonc | 0 ...DefinitionObjectSpread.baseline.jsonc.diff | 2 + ...sInMultiplePropertyAccesses.baseline.jsonc | 0 ...ltiplePropertyAccesses.baseline.jsonc.diff | 2 + ...DefinitionOverriddenMember1.baseline.jsonc | 0 ...itionOverriddenMember1.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember10.baseline.jsonc | 0 ...efinitionOverriddenMember11.baseline.jsonc | 0 ...tionOverriddenMember11.baseline.jsonc.diff | 18 + ...efinitionOverriddenMember12.baseline.jsonc | 0 ...tionOverriddenMember12.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember13.baseline.jsonc | 0 ...tionOverriddenMember13.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember14.baseline.jsonc | 0 ...tionOverriddenMember14.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember15.baseline.jsonc | 0 ...tionOverriddenMember15.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember16.baseline.jsonc | 0 ...tionOverriddenMember16.baseline.jsonc.diff | 8 + ...efinitionOverriddenMember17.baseline.jsonc | 0 ...tionOverriddenMember17.baseline.jsonc.diff | 16 + ...efinitionOverriddenMember18.baseline.jsonc | 0 ...tionOverriddenMember18.baseline.jsonc.diff | 16 + ...efinitionOverriddenMember19.baseline.jsonc | 0 ...tionOverriddenMember19.baseline.jsonc.diff | 16 + ...DefinitionOverriddenMember2.baseline.jsonc | 0 ...itionOverriddenMember2.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember20.baseline.jsonc | 0 ...tionOverriddenMember20.baseline.jsonc.diff | 16 + ...efinitionOverriddenMember21.baseline.jsonc | 0 ...tionOverriddenMember21.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember22.baseline.jsonc | 0 ...tionOverriddenMember22.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember23.baseline.jsonc | 0 ...tionOverriddenMember23.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember24.baseline.jsonc | 0 ...tionOverriddenMember24.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember25.baseline.jsonc | 0 ...tionOverriddenMember25.baseline.jsonc.diff | 2 + ...efinitionOverriddenMember26.baseline.jsonc | 0 ...tionOverriddenMember26.baseline.jsonc.diff | 2 + ...DefinitionOverriddenMember3.baseline.jsonc | 0 ...itionOverriddenMember3.baseline.jsonc.diff | 2 + ...DefinitionOverriddenMember4.baseline.jsonc | 0 ...itionOverriddenMember4.baseline.jsonc.diff | 2 + ...DefinitionOverriddenMember5.baseline.jsonc | 0 ...itionOverriddenMember5.baseline.jsonc.diff | 2 + ...DefinitionOverriddenMember6.baseline.jsonc | 0 ...itionOverriddenMember6.baseline.jsonc.diff | 2 + ...DefinitionOverriddenMember7.baseline.jsonc | 0 ...itionOverriddenMember7.baseline.jsonc.diff | 2 + ...DefinitionOverriddenMember8.baseline.jsonc | 0 ...itionOverriddenMember8.baseline.jsonc.diff | 11 + ...DefinitionOverriddenMember9.baseline.jsonc | 0 ...itionOverriddenMember9.baseline.jsonc.diff | 2 + ...nitionPartialImplementation.baseline.jsonc | 0 ...nPartialImplementation.baseline.jsonc.diff | 2 + .../goToDefinitionPrimitives.baseline.jsonc | 0 .../goToDefinitionPrivateName.baseline.jsonc | 0 ...oDefinitionPrivateName.baseline.jsonc.diff | 20 + ...efinitionPropertyAssignment.baseline.jsonc | 0 ...tionPropertyAssignment.baseline.jsonc.diff | 11 + .../goToDefinitionRest.baseline.jsonc | 0 .../goToDefinitionRest.baseline.jsonc.diff | 2 + .../goToDefinitionReturn1.baseline.jsonc | 0 .../goToDefinitionReturn1.baseline.jsonc.diff | 2 + .../goToDefinitionReturn2.baseline.jsonc | 0 .../goToDefinitionReturn2.baseline.jsonc.diff | 2 + .../goToDefinitionReturn3.baseline.jsonc | 0 .../goToDefinitionReturn3.baseline.jsonc.diff | 2 + .../goToDefinitionReturn4.baseline.jsonc | 0 .../goToDefinitionReturn5.baseline.jsonc | 0 .../goToDefinitionReturn5.baseline.jsonc.diff | 2 + .../goToDefinitionReturn6.baseline.jsonc | 0 .../goToDefinitionReturn6.baseline.jsonc.diff | 2 + .../goToDefinitionReturn7.baseline.jsonc | 0 .../goToDefinitionReturn7.baseline.jsonc.diff | 2 + .../goToDefinitionSameFile.baseline.jsonc | 0 ...goToDefinitionSameFile.baseline.jsonc.diff | 80 + ...initionSatisfiesExpression1.baseline.jsonc | 0 ...onSatisfiesExpression1.baseline.jsonc.diff | 17 + .../goToDefinitionScriptImport.baseline.jsonc | 0 ...DefinitionScriptImport.baseline.jsonc.diff | 24 + ...efinitionScriptImportServer.baseline.jsonc | 0 ...tionScriptImportServer.baseline.jsonc.diff | 53 + ...oToDefinitionShadowVariable.baseline.jsonc | 0 ...finitionShadowVariable.baseline.jsonc.diff | 12 + ...nShadowVariableInsideModule.baseline.jsonc | 0 ...owVariableInsideModule.baseline.jsonc.diff | 11 + ...finitionShorthandProperty01.baseline.jsonc | 0 ...ionShorthandProperty01.baseline.jsonc.diff | 36 + ...finitionShorthandProperty02.baseline.jsonc | 0 ...finitionShorthandProperty03.baseline.jsonc | 0 ...ionShorthandProperty03.baseline.jsonc.diff | 11 + ...finitionShorthandProperty04.baseline.jsonc | 0 ...ionShorthandProperty04.baseline.jsonc.diff | 11 + ...finitionShorthandProperty05.baseline.jsonc | 0 ...ionShorthandProperty05.baseline.jsonc.diff | 11 + ...finitionShorthandProperty06.baseline.jsonc | 0 ...ionShorthandProperty06.baseline.jsonc.diff | 2 + ...itionSignatureAlias_require.baseline.jsonc | 0 ...SignatureAlias_require.baseline.jsonc.diff | 21 + .../goToDefinitionSimple.baseline.jsonc | 0 .../goToDefinitionSimple.baseline.jsonc.diff | 22 + .../goToDefinitionSourceUnit.baseline.jsonc | 0 ...ToDefinitionSourceUnit.baseline.jsonc.diff | 41 + .../goToDefinitionSwitchCase1.baseline.jsonc | 0 ...oDefinitionSwitchCase1.baseline.jsonc.diff | 2 + .../goToDefinitionSwitchCase2.baseline.jsonc | 0 ...oDefinitionSwitchCase2.baseline.jsonc.diff | 2 + .../goToDefinitionSwitchCase3.baseline.jsonc | 0 ...oDefinitionSwitchCase3.baseline.jsonc.diff | 11 + .../goToDefinitionSwitchCase4.baseline.jsonc | 0 ...oDefinitionSwitchCase4.baseline.jsonc.diff | 2 + .../goToDefinitionSwitchCase5.baseline.jsonc | 0 ...oDefinitionSwitchCase5.baseline.jsonc.diff | 2 + .../goToDefinitionSwitchCase6.baseline.jsonc | 0 ...oDefinitionSwitchCase6.baseline.jsonc.diff | 24 + .../goToDefinitionSwitchCase7.baseline.jsonc | 0 ...oDefinitionSwitchCase7.baseline.jsonc.diff | 2 + ...tionTaggedTemplateOverloads.baseline.jsonc | 0 ...aggedTemplateOverloads.baseline.jsonc.diff | 11 + .../goToDefinitionThis.baseline.jsonc | 0 .../goToDefinitionThis.baseline.jsonc.diff | 20 + ...oToDefinitionTypeOnlyImport.baseline.jsonc | 0 ...finitionTypeOnlyImport.baseline.jsonc.diff | 2 + ...goToDefinitionTypePredicate.baseline.jsonc | 0 ...efinitionTypePredicate.baseline.jsonc.diff | 11 + ...itionTypeReferenceDirective.baseline.jsonc | 0 ...TypeReferenceDirective.baseline.jsonc.diff | 12 + .../goToDefinitionTypeofThis.baseline.jsonc | 0 ...ToDefinitionTypeofThis.baseline.jsonc.diff | 20 + ...oDefinitionUndefinedSymbols.baseline.jsonc | 0 ...efinitionUnionTypeProperty1.baseline.jsonc | 0 ...tionUnionTypeProperty1.baseline.jsonc.diff | 2 + ...efinitionUnionTypeProperty2.baseline.jsonc | 0 ...tionUnionTypeProperty2.baseline.jsonc.diff | 2 + ...efinitionUnionTypeProperty3.baseline.jsonc | 0 ...tionUnionTypeProperty3.baseline.jsonc.diff | 2 + ...efinitionUnionTypeProperty4.baseline.jsonc | 0 ...tionUnionTypeProperty4.baseline.jsonc.diff | 2 + ...nTypeProperty_discriminated.baseline.jsonc | 0 ...Property_discriminated.baseline.jsonc.diff | 31 + ...efinitionVariableAssignment.baseline.jsonc | 0 ...tionVariableAssignment.baseline.jsonc.diff | 10 + ...finitionVariableAssignment1.baseline.jsonc | 0 ...ionVariableAssignment1.baseline.jsonc.diff | 9 + ...finitionVariableAssignment2.baseline.jsonc | 0 ...ionVariableAssignment2.baseline.jsonc.diff | 10 + ...finitionVariableAssignment3.baseline.jsonc | 0 ...ionVariableAssignment3.baseline.jsonc.diff | 9 + .../goToDefinitionYield1.baseline.jsonc | 0 .../goToDefinitionYield1.baseline.jsonc.diff | 18 + .../goToDefinitionYield2.baseline.jsonc | 0 .../goToDefinitionYield2.baseline.jsonc.diff | 2 + .../goToDefinitionYield3.baseline.jsonc | 0 .../goToDefinitionYield3.baseline.jsonc.diff | 15 + .../goToDefinitionYield4.baseline.jsonc | 0 .../goToDefinitionYield4.baseline.jsonc.diff | 2 + ..._filteringGenericMappedType.baseline.jsonc | 0 ...eringGenericMappedType.baseline.jsonc.diff | 13 + ...inition_filteringMappedType.baseline.jsonc | 0 ...on_filteringMappedType.baseline.jsonc.diff | 2 + .../goToDefinition_mappedType.baseline.jsonc | 0 ...oDefinition_mappedType.baseline.jsonc.diff | 2 + .../goToDefinition_super.baseline.jsonc | 0 .../goToDefinition_super.baseline.jsonc.diff | 24 + ...oToDefinition_untypedModule.baseline.jsonc | 0 ...finition_untypedModule.baseline.jsonc.diff | 2 + .../goToModuleAliasDefinition.baseline.jsonc | 0 ...oModuleAliasDefinition.baseline.jsonc.diff | 9 + .../goToTypeDefinition4.baseline.jsonc | 0 .../goToTypeDefinition4.baseline.jsonc.diff | 2 + ...finitionConstructorFunction.baseline.jsonc | 0 ...ionConstructorFunction.baseline.jsonc.diff | 2 + ...tionInObjectBindingPattern1.baseline.jsonc | 0 ...nObjectBindingPattern1.baseline.jsonc.diff | 15 + ...tionInObjectBindingPattern2.baseline.jsonc | 0 ...nObjectBindingPattern2.baseline.jsonc.diff | 24 + .../gotoDefinitionLinkTag1.baseline.jsonc | 0 ...gotoDefinitionLinkTag1.baseline.jsonc.diff | 145 + .../gotoDefinitionLinkTag2.baseline.jsonc | 0 ...gotoDefinitionLinkTag2.baseline.jsonc.diff | 11 + .../gotoDefinitionLinkTag3.baseline.jsonc | 0 ...gotoDefinitionLinkTag3.baseline.jsonc.diff | 16 + .../gotoDefinitionLinkTag4.baseline.jsonc | 0 ...gotoDefinitionLinkTag4.baseline.jsonc.diff | 17 + .../gotoDefinitionLinkTag5.baseline.jsonc | 0 ...gotoDefinitionLinkTag5.baseline.jsonc.diff | 12 + .../gotoDefinitionLinkTag6.baseline.jsonc | 0 ...gotoDefinitionLinkTag6.baseline.jsonc.diff | 11 + ...essExpressionHeritageClause.baseline.jsonc | 0 ...pressionHeritageClause.baseline.jsonc.diff | 11 + .../gotoDefinitionSatisfiesTag.baseline.jsonc | 0 ...DefinitionSatisfiesTag.baseline.jsonc.diff | 14 + .../gotoDefinitionThrowsTag.baseline.jsonc | 0 ...otoDefinitionThrowsTag.baseline.jsonc.diff | 14 + ...mportTypeNodeGoToDefinition.baseline.jsonc | 0 ...TypeNodeGoToDefinition.baseline.jsonc.diff | 56 + .../javaScriptClass3.baseline.jsonc | 0 .../javaScriptClass3.baseline.jsonc.diff | 11 + .../goToDefinition/jsDocSee1.baseline.jsonc | 0 .../jsDocSee1.baseline.jsonc.diff | 99 + .../goToDefinition/jsDocSee2.baseline.jsonc | 0 .../jsDocSee2.baseline.jsonc.diff | 47 + .../goToDefinition/jsDocSee3.baseline.jsonc | 0 .../jsDocSee3.baseline.jsonc.diff | 16 + .../goToDefinition/jsDocSee4.baseline.jsonc | 0 .../jsDocSee4.baseline.jsonc.diff | 55 + ...docTypedefTagGoToDefinition.baseline.jsonc | 0 ...pedefTagGoToDefinition.baseline.jsonc.diff | 11 + .../jsxSpreadReference.baseline.jsonc | 0 .../jsxSpreadReference.baseline.jsonc.diff | 2 + ..._with_variable_entity_names.baseline.jsonc | 0 ..._variable_entity_names.baseline.jsonc.diff | 14 + .../reallyLargeFile.baseline.jsonc | 0 .../reallyLargeFile.baseline.jsonc.diff | 583717 +++++++++++++++ .../tsxGoToDefinitionClasses.baseline.jsonc | 0 ...xGoToDefinitionClasses.baseline.jsonc.diff | 20 + ...tsxGoToDefinitionIntrinsics.baseline.jsonc | 0 ...ToDefinitionIntrinsics.baseline.jsonc.diff | 20 + ...efinitionStatelessFunction1.baseline.jsonc | 0 ...tionStatelessFunction1.baseline.jsonc.diff | 47 + ...efinitionStatelessFunction2.baseline.jsonc | 0 ...tionStatelessFunction2.baseline.jsonc.diff | 47 + ...DefinitionUnionElementType1.baseline.jsonc | 0 ...itionUnionElementType1.baseline.jsonc.diff | 2 + ...DefinitionUnionElementType2.baseline.jsonc | 0 ...itionUnionElementType2.baseline.jsonc.diff | 2 + ...mplementationClassMethod_00.baseline.jsonc | 7 + ...entationClassMethod_00.baseline.jsonc.diff | 2 + ...mplementationClassMethod_01.baseline.jsonc | 29 + ...entationClassMethod_01.baseline.jsonc.diff | 11 + .../goToImplementationEnum_00.baseline.jsonc | 8 + ...oImplementationEnum_00.baseline.jsonc.diff | 2 + .../goToImplementationEnum_01.baseline.jsonc | 8 + ...oImplementationEnum_01.baseline.jsonc.diff | 2 + ...mentationInterfaceMethod_00.baseline.jsonc | 43 + ...tionInterfaceMethod_00.baseline.jsonc.diff | 11 + ...mentationInterfaceMethod_01.baseline.jsonc | 31 + ...tionInterfaceMethod_01.baseline.jsonc.diff | 17 + ...mentationInterfaceMethod_02.baseline.jsonc | 32 + ...tionInterfaceMethod_02.baseline.jsonc.diff | 11 + ...mentationInterfaceMethod_03.baseline.jsonc | 19 + ...tionInterfaceMethod_03.baseline.jsonc.diff | 11 + ...mentationInterfaceMethod_04.baseline.jsonc | 21 + ...tionInterfaceMethod_04.baseline.jsonc.diff | 2 + ...mentationInterfaceMethod_05.baseline.jsonc | 31 + ...tionInterfaceMethod_05.baseline.jsonc.diff | 26 + ...mentationInterfaceMethod_06.baseline.jsonc | 39 + ...tionInterfaceMethod_06.baseline.jsonc.diff | 24 + ...mentationInterfaceMethod_08.baseline.jsonc | 17 + ...tionInterfaceMethod_08.baseline.jsonc.diff | 2 + ...mentationInterfaceMethod_09.baseline.jsonc | 55 + ...tionInterfaceMethod_09.baseline.jsonc.diff | 42 + ...mentationInterfaceMethod_10.baseline.jsonc | 67 + ...tionInterfaceMethod_10.baseline.jsonc.diff | 11 + ...mentationInterfaceMethod_11.baseline.jsonc | 8 + ...tionInterfaceMethod_11.baseline.jsonc.diff | 2 + ...ntationInterfaceProperty_00.baseline.jsonc | 18 + ...onInterfaceProperty_00.baseline.jsonc.diff | 2 + ...ntationInterfaceProperty_01.baseline.jsonc | 11 + ...onInterfaceProperty_01.baseline.jsonc.diff | 2 + ...oImplementationInterface_00.baseline.jsonc | 11 + ...ementationInterface_00.baseline.jsonc.diff | 22 + ...oImplementationInterface_01.baseline.jsonc | 20 + ...ementationInterface_01.baseline.jsonc.diff | 10 + ...oImplementationInterface_02.baseline.jsonc | 7 + ...ementationInterface_02.baseline.jsonc.diff | 23 + ...oImplementationInterface_03.baseline.jsonc | 5 + ...ementationInterface_03.baseline.jsonc.diff | 8 + ...oImplementationInterface_04.baseline.jsonc | 7 + ...ementationInterface_04.baseline.jsonc.diff | 17 + ...oImplementationInterface_05.baseline.jsonc | 8 + ...ementationInterface_05.baseline.jsonc.diff | 9 + ...oImplementationInterface_06.baseline.jsonc | 7 + ...ementationInterface_06.baseline.jsonc.diff | 11 + ...oImplementationInterface_07.baseline.jsonc | 25 + ...ementationInterface_07.baseline.jsonc.diff | 33 + ...oImplementationInterface_08.baseline.jsonc | 12 + ...ementationInterface_08.baseline.jsonc.diff | 2 + ...oImplementationInterface_09.baseline.jsonc | 4 + ...ementationInterface_09.baseline.jsonc.diff | 8 + ...oImplementationInterface_10.baseline.jsonc | 13 + ...ementationInterface_10.baseline.jsonc.diff | 2 + .../goToImplementationInvalid.baseline.jsonc | 21 + .../goToImplementationLocal_00.baseline.jsonc | 4 + ...ImplementationLocal_00.baseline.jsonc.diff | 2 + .../goToImplementationLocal_01.baseline.jsonc | 4 + ...ImplementationLocal_01.baseline.jsonc.diff | 2 + .../goToImplementationLocal_02.baseline.jsonc | 6 + ...ImplementationLocal_02.baseline.jsonc.diff | 2 + .../goToImplementationLocal_03.baseline.jsonc | 8 + ...ImplementationLocal_03.baseline.jsonc.diff | 2 + .../goToImplementationLocal_04.baseline.jsonc | 6 + ...ImplementationLocal_04.baseline.jsonc.diff | 2 + .../goToImplementationLocal_05.baseline.jsonc | 8 + ...ImplementationLocal_05.baseline.jsonc.diff | 2 + .../goToImplementationLocal_06.baseline.jsonc | 4 + ...ImplementationLocal_06.baseline.jsonc.diff | 2 + .../goToImplementationLocal_07.baseline.jsonc | 4 + ...ImplementationLocal_07.baseline.jsonc.diff | 2 + .../goToImplementationLocal_08.baseline.jsonc | 4 + ...ImplementationLocal_08.baseline.jsonc.diff | 2 + ...oImplementationNamespace_00.baseline.jsonc | 27 + ...ementationNamespace_00.baseline.jsonc.diff | 11 + ...oImplementationNamespace_01.baseline.jsonc | 7 + ...ementationNamespace_01.baseline.jsonc.diff | 2 + ...oImplementationNamespace_02.baseline.jsonc | 7 + ...ementationNamespace_02.baseline.jsonc.diff | 2 + ...oImplementationNamespace_03.baseline.jsonc | 23 + ...ementationNamespace_03.baseline.jsonc.diff | 14 + ...oImplementationNamespace_04.baseline.jsonc | 23 + ...ementationNamespace_04.baseline.jsonc.diff | 14 + ...oImplementationNamespace_05.baseline.jsonc | 52 + ...ementationNamespace_05.baseline.jsonc.diff | 49 + ...oImplementationNamespace_06.baseline.jsonc | 8 + ...ementationNamespace_06.baseline.jsonc.diff | 8 + ...rthandPropertyAssignment_00.baseline.jsonc | 49 + ...dPropertyAssignment_00.baseline.jsonc.diff | 34 + ...rthandPropertyAssignment_01.baseline.jsonc | 27 + ...dPropertyAssignment_01.baseline.jsonc.diff | 28 + ...rthandPropertyAssignment_02.baseline.jsonc | 12 + ...dPropertyAssignment_02.baseline.jsonc.diff | 2 + .../goToImplementationSuper_00.baseline.jsonc | 11 + ...ImplementationSuper_00.baseline.jsonc.diff | 11 + .../goToImplementationSuper_01.baseline.jsonc | 11 + ...ImplementationSuper_01.baseline.jsonc.diff | 11 + .../goToImplementationThis_00.baseline.jsonc | 9 + ...oImplementationThis_00.baseline.jsonc.diff | 2 + .../goToImplementationThis_01.baseline.jsonc | 7 + ...oImplementationThis_01.baseline.jsonc.diff | 2 + ...oImplementationTypeAlias_00.baseline.jsonc | 4 + ...ementationTypeAlias_00.baseline.jsonc.diff | 8 + ...ementation_inDifferentFiles.baseline.jsonc | 16 + ...ation_inDifferentFiles.baseline.jsonc.diff | 2 + ...oToImplementation_satisfies.baseline.jsonc | 7 + ...plementation_satisfies.baseline.jsonc.diff | 10 + .../implementation01.baseline.jsonc | 4 + .../implementation01.baseline.jsonc.diff | 2 + .../goToTypeDefinition.baseline.jsonc | 0 .../goToTypeDefinition.baseline.jsonc.diff | 2 + .../goToTypeDefinition2.baseline.jsonc | 0 .../goToTypeDefinition2.baseline.jsonc.diff | 13 + .../goToTypeDefinition3.baseline.jsonc | 0 .../goToTypeDefinition3.baseline.jsonc.diff | 2 + .../goToTypeDefinition4.baseline.jsonc | 0 .../goToTypeDefinition4.baseline.jsonc.diff | 8 + .../goToTypeDefinition5.baseline.jsonc | 0 .../goToTypeDefinitionAliases.baseline.jsonc | 0 ...oTypeDefinitionAliases.baseline.jsonc.diff | 11 + ...ToTypeDefinitionEnumMembers.baseline.jsonc | 0 ...eDefinitionEnumMembers.baseline.jsonc.diff | 2 + ...oToTypeDefinitionImportMeta.baseline.jsonc | 0 ...peDefinitionImportMeta.baseline.jsonc.diff | 2 + ...goToTypeDefinitionModifiers.baseline.jsonc | 0 ...ypeDefinitionModifiers.baseline.jsonc.diff | 430 + .../goToTypeDefinitionModule.baseline.jsonc | 0 ...ToTypeDefinitionModule.baseline.jsonc.diff | 11 + ...oToTypeDefinitionPrimitives.baseline.jsonc | 0 ...goToTypeDefinitionUnionType.baseline.jsonc | 0 ...ypeDefinitionUnionType.baseline.jsonc.diff | 2 + .../goToTypeDefinition_Pick.baseline.jsonc | 0 ...oToTypeDefinition_Pick.baseline.jsonc.diff | 43 + ...oToTypeDefinition_arrayType.baseline.jsonc | 0 ...peDefinition_arrayType.baseline.jsonc.diff | 433 + ...oTypeDefinition_promiseType.baseline.jsonc | 0 ...Definition_promiseType.baseline.jsonc.diff | 65 + ...ToTypeDefinition_returnType.baseline.jsonc | 0 ...eDefinition_returnType.baseline.jsonc.diff | 166 + ...ypeDefinition_typeReference.baseline.jsonc | 0 ...finition_typeReference.baseline.jsonc.diff | 2 + .../goToTypeDefinition_typedef.baseline.jsonc | 0 ...TypeDefinition_typedef.baseline.jsonc.diff | 13 + .../goToType/typedefinition01.baseline.jsonc | 0 .../typedefinition01.baseline.jsonc.diff | 2 + 552 files changed, 589836 insertions(+) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/definition.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/definition.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/definition01.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/definition01.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionAwait2.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionBuiltInTypes.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionBuiltInValues.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName4.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImport2.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImport3.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionIndexSignature2.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsDocImportTag2.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsDocImportTag3.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember10.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionPrimitives.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionReturn4.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShorthandProperty02.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionUndefinedSymbols.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/jsDocSee1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/jsDocSee2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/jsDocSee3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/jsDocSee4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInvalid.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc create mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition2.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition3.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition4.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition5.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinitionPrimitives.baseline.jsonc (100%) rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc.diff rename testdata/baselines/reference/{ => submodule}/fourslash/goToType/typedefinition01.baseline.jsonc (100%) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index ec068c9435..11f2296664 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -242,6 +242,52 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio return strings.Join(fixedLines, "\n") }, } + case goToDefinitionCmd, goToTypeDefinitionCmd, goToImplementationCmd: + return baseline.Options{ + Subfolder: subfolder, + IsSubmodule: true, + DiffFixupOld: func(s string) string { + var commandLines []string + commandPrefix := regexp.MustCompile(`^// === ([a-z\sA-Z]*) ===`) + testFilePrefix := "/tests/cases/fourslash" + serverTestFilePrefix := "/server" + contextSpanOpening := "<|" + contextSpanClosing := "|>" + replacer := strings.NewReplacer( + contextSpanOpening, "", + contextSpanClosing, "", + testFilePrefix, "", + serverTestFilePrefix, "", + ) + var defIdRegex = regexp.MustCompile(`{\| defId: [0-9]+ \|}`) + detailsStr := "// === Details ===" + lines := strings.Split(s, "\n") + var isInCommand bool + var isInDetails bool + for _, line := range lines { + matches := commandPrefix.FindStringSubmatch(line) + if len(matches) > 0 { + isInDetails = false + commandName := matches[1] + if commandName == string(command) || + command == goToDefinitionCmd && commandName == "getDefinitionAtPosition" { + isInCommand = true + } else { + isInCommand = false + } + } else if strings.Contains(line, detailsStr) { + isInDetails = true + } + // We don't diff the details section, since the structure of responses is different. + if isInCommand && !isInDetails { + fixedLine := replacer.Replace(line) + fixedLine = defIdRegex.ReplaceAllString(fixedLine, "") + commandLines = append(commandLines, fixedLine) + } + } + return strings.Join(commandLines, "\n") + }, + } default: return baseline.Options{ Subfolder: subfolder, diff --git a/testdata/baselines/reference/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff new file mode 100644 index 0000000000..5310b4d085 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.declarationMapGoToDefinition.baseline.jsonc ++++ new.declarationMapGoToDefinition.baseline.jsonc +@@= skipped -5, +5 lines =@@ + // otherMethod() { + // if (Math.random() > 0.5) { + // return {x: 42}; +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- + + // === /mymodule.ts === + // import * as mod from "./indexdef"; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff new file mode 100644 index 0000000000..3ead80aa9a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc ++++ new.declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc +@@= skipped -5, +5 lines =@@ + // otherMethod() { + // if (Math.random() > 0.5) { + // return {x: 42}; +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- + + // === /mymodule.ts === + // import * as mod from "./out/indexdef"; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff new file mode 100644 index 0000000000..b4d707faa1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff @@ -0,0 +1,28 @@ +--- old.declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc ++++ new.declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // constructor(){ + // return; + // } +-// --- (line: 5) skipped --- ++// // --- (line: 5) skipped --- + + // === /buttonClass/Source.ts === + // // I cannot F12 navigate to Control +@@= skipped -9, +9 lines =@@ + // public myFunction() { + // // I cannot F12 navigate to myVar + // // vvvvv +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- ++ ++ + + // === goToDefinition === + // === /BaseClass/Source.ts === +@@= skipped -21, +23 lines =@@ + // this.myVar; + // } else { + // this.myVar.toLocaleUpperCase(); +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff new file mode 100644 index 0000000000..440d955c03 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff @@ -0,0 +1,13 @@ +--- old.declarationMapsOutOfDateMapping.baseline.jsonc ++++ new.declarationMapsOutOfDateMapping.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /home/src/workspaces/project/node_modules/a/src/index.ts === + // export class [|Foo|] { + // } + // + + // === /home/src/workspaces/project/index.ts === +-// import { Foo/*GOTO DEF POS*/ } from "a"; ++// import { Foo/*GOTO DEF*/ } from "a"; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/definition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/definition.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/definition.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition.baseline.jsonc.diff new file mode 100644 index 0000000000..34b440e2ca --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.definition.baseline.jsonc ++++ new.definition.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.ts === +-// [||]export class Foo {} ++// [|export class Foo {}|] + + // === /b.ts === + // import n = require([|'./a/*GOTO DEF*/'|]); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/definition01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition01.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/definition01.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/definition01.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition01.baseline.jsonc.diff new file mode 100644 index 0000000000..66a4d9300b --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definition01.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.definition01.baseline.jsonc ++++ new.definition01.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.ts === +-// [||]export class Foo {} ++// [|export class Foo {}|] + + // === /b.ts === + // import n = require([|'./a/*GOTO DEF*/'|]); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff new file mode 100644 index 0000000000..7f88fe866d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff @@ -0,0 +1,13 @@ +--- old.definitionNameOnEnumMember.baseline.jsonc ++++ new.definitionNameOnEnumMember.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /definitionNameOnEnumMember.ts === + // enum e { + // firstMember, + // secondMember, + // [|thirdMember|] + // } +-// var enumMember = e./*GOTO DEF POS*/thirdMember; ++// var enumMember = e./*GOTO DEF*/thirdMember; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff new file mode 100644 index 0000000000..363de6cb92 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.findAllRefsForDefaultExport.baseline.jsonc ++++ new.findAllRefsForDefaultExport.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff new file mode 100644 index 0000000000..f7329e53f4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionAcrossMultipleProjects.baseline.jsonc ++++ new.goToDefinitionAcrossMultipleProjects.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff new file mode 100644 index 0000000000..9cdd0fd608 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff @@ -0,0 +1,29 @@ +--- old.goToDefinitionAlias.baseline.jsonc ++++ new.goToDefinitionAlias.baseline.jsonc +@@= skipped -12, +12 lines =@@ + // var v1 = new alias1.Foo(); + // var v2 = new Module.alias2.Foo(); + ++ ++ + // === goToDefinition === + // === /b.ts === + // import [|alias1|] = require("fileb"); +@@= skipped -15, +17 lines =@@ + // var v1 = new /*GOTO DEF*/alias1.Foo(); + // var v2 = new Module.alias2.Foo(); + ++ ++ + // === goToDefinition === + // === /b.ts === + // import alias1 = require("fileb"); +@@= skipped -14, +16 lines =@@ + // // Value posistion + // var v1 = new alias1.Foo(); + // var v2 = new Module.alias2.Foo(); ++ ++ + + // === goToDefinition === + // === /b.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff new file mode 100644 index 0000000000..03a6fc31d3 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff @@ -0,0 +1,80 @@ +--- old.goToDefinitionAmbiants.baseline.jsonc ++++ new.goToDefinitionAmbiants.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionAmbiants.ts === + // declare var [|ambientVar|]; + // declare function ambientFunction(); +@@= skipped -7, +7 lines =@@ + // public method(); + // } + // +-// /*GOTO DEF POS*/ambientVar = 1; ++// /*GOTO DEF*/ambientVar = 1; + // ambientFunction(); + // var ambientClassVariable = new ambientClass(); + // ambientClass.method(); + // ambientClassVariable.method(); + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionAmbiants.ts === + // declare var ambientVar; + // declare function [|ambientFunction|](); +@@= skipped -17, +19 lines =@@ + // } + // + // ambientVar = 1; +-// /*GOTO DEF POS*/ambientFunction(); ++// /*GOTO DEF*/ambientFunction(); + // var ambientClassVariable = new ambientClass(); + // ambientClass.method(); + // ambientClassVariable.method(); + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionAmbiants.ts === + // declare var ambientVar; + // declare function ambientFunction(); +@@= skipped -17, +19 lines =@@ + // + // ambientVar = 1; + // ambientFunction(); +-// var ambientClassVariable = new /*GOTO DEF POS*/ambientClass(); ++// var ambientClassVariable = new /*GOTO DEF*/ambientClass(); + // ambientClass.method(); + // ambientClassVariable.method(); + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionAmbiants.ts === + // declare var ambientVar; + // declare function ambientFunction(); +@@= skipped -17, +19 lines =@@ + // ambientVar = 1; + // ambientFunction(); + // var ambientClassVariable = new ambientClass(); +-// ambientClass./*GOTO DEF POS*/method(); ++// ambientClass./*GOTO DEF*/method(); + // ambientClassVariable.method(); + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionAmbiants.ts === + // declare var ambientVar; + // declare function ambientFunction(); +@@= skipped -17, +19 lines =@@ + // ambientFunction(); + // var ambientClassVariable = new ambientClass(); + // ambientClass.method(); +-// ambientClassVariable./*GOTO DEF POS*/method(); ++// ambientClassVariable./*GOTO DEF*/method(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff new file mode 100644 index 0000000000..17e4f4cd74 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionApparentTypeProperties.baseline.jsonc ++++ new.goToDefinitionApparentTypeProperties.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // o./*GOTO DEF*/myObjectMethod(); + // o["myObjectMethod"](); + ++ ++ + // === goToDefinition === + // === /goToDefinitionApparentTypeProperties.ts === + // interface Number { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff new file mode 100644 index 0000000000..3f3f0ba001 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionAwait1.baseline.jsonc ++++ new.goToDefinitionAwait1.baseline.jsonc +@@= skipped -6, +6 lines =@@ + // await Promise.resolve(0); + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionAwait1.ts === + // async function foo() { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait2.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff new file mode 100644 index 0000000000..6480a9fd19 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff @@ -0,0 +1,15 @@ +--- old.goToDefinitionAwait3.baseline.jsonc ++++ new.goToDefinitionAwait3.baseline.jsonc +@@= skipped -5, +5 lines =@@ + // } + // + // async foo() { +-// await Promise.resolve(0); +-// } +-// } ++// // --- (line: 7) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionAwait3.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff new file mode 100644 index 0000000000..57e51656bf --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionAwait4.baseline.jsonc ++++ new.goToDefinitionAwait4.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionAwait4.ts === + // async function outerAsyncFun() { +-// let [|{| contextId: 0 |}af|] = async () => { ++// let [|af|] = async () => { + // /*GOTO DEF*/await Promise.resolve(0); + // } + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionBuiltInTypes.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionBuiltInTypes.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionBuiltInTypes.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionBuiltInTypes.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionBuiltInValues.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionBuiltInValues.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionBuiltInValues.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionBuiltInValues.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff new file mode 100644 index 0000000000..7f911baeda --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionCSSPatternAmbientModule.baseline.jsonc ++++ new.goToDefinitionCSSPatternAmbientModule.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === +-// === /index.css === +-// [||]html { font-size: 16px; } +- + // === /types.ts === + // declare module [|"*.css"|] { + // const styles: any; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff new file mode 100644 index 0000000000..9696a5e358 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff @@ -0,0 +1,42 @@ +--- old.goToDefinitionClassConstructors.baseline.jsonc ++++ new.goToDefinitionClassConstructors.baseline.jsonc +@@= skipped -12, +12 lines =@@ + // import { Derived } from './definitions' + // const derived = new /*GOTO DEF*/[|Derived|](cArg) + ++ ++ + // === goToDefinition === + // === /defInSameFile.ts === + // import { Base } from './definitions' +@@= skipped -15, +17 lines =@@ + // } + // + // export class Derived extends Base { +-// --- (line: 6) skipped --- ++// // --- (line: 6) skipped --- ++ ++ + + // === goToDefinition === + // === /hasConstructor.ts === +@@= skipped -11, +13 lines =@@ + // } + // const hasConstructor = new /*GOTO DEF*/HasConstructor(cArg) + ++ ++ + // === goToDefinition === + // === /definitions.ts === + // export class [|Base|] { +@@= skipped -7, +9 lines =@@ + // } + // + // export class Derived extends Base { +-// readonly email = this.cArg.getByLabel('Email') +-// readonly password = this.cArg.getByLabel('Password') +-// } ++// // --- (line: 6) skipped --- + + // === /defInSameFile.ts === + // import { Base } from './definitions' \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff new file mode 100644 index 0000000000..75115f25c1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff @@ -0,0 +1,63 @@ +--- old.goToDefinitionClassStaticBlocks.baseline.jsonc ++++ new.goToDefinitionClassStaticBlocks.baseline.jsonc +@@= skipped -1, +1 lines =@@ + // === /goToDefinitionClassStaticBlocks.ts === + // class ClassStaticBocks { + // static x; +-// /*GOTO DEF*/[|{| textSpan: true, defId: 0 |}static|] {} +-// static y; +-// [|static|] {} +-// static y; +-// [|static|] {} +-// } +- +-// === goToDefinition === +-// === /goToDefinitionClassStaticBlocks.ts === +-// class ClassStaticBocks { +-// static x; +-// [|static|] {} +-// static y; +-// /*GOTO DEF*/[|{| textSpan: true, defId: 1 |}static|] {} +-// static y; +-// [|static|] {} +-// } +- +-// === goToDefinition === +-// === /goToDefinitionClassStaticBlocks.ts === +-// class ClassStaticBocks { +-// static x; +-// [|static|] {} +-// static y; +-// [|static|] {} +-// static y; +-// /*GOTO DEF*/[|{| textSpan: true, defId: 2 |}static|] {} ++// /*GOTO DEF*/static {} ++// static y; ++// static {} ++// static y; ++// static {} ++// } ++ ++ ++ ++// === goToDefinition === ++// === /goToDefinitionClassStaticBlocks.ts === ++// class ClassStaticBocks { ++// static x; ++// static {} ++// static y; ++// /*GOTO DEF*/static {} ++// static y; ++// static {} ++// } ++ ++ ++ ++// === goToDefinition === ++// === /goToDefinitionClassStaticBlocks.ts === ++// --- (line: 3) skipped --- ++// static y; ++// static {} ++// static y; ++// /*GOTO DEF*/static {} + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff new file mode 100644 index 0000000000..a00a607281 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff @@ -0,0 +1,68 @@ +--- old.goToDefinitionConstructorOfClassExpression01.baseline.jsonc ++++ new.goToDefinitionConstructorOfClassExpression01.baseline.jsonc +@@= skipped -6, +6 lines =@@ + // } + // + // var y = class C extends x { +-// constructor() { +-// --- (line: 9) skipped --- ++// // --- (line: 8) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOfClassExpression01.ts === +@@= skipped -17, +18 lines =@@ + // } + // var z = class C extends x { + // m() { +-// return new C; +-// --- (line: 16) skipped --- ++// // --- (line: 15) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOfClassExpression01.ts === +@@= skipped -23, +24 lines =@@ + // } + // } + // +-// var x1 = new C(); +-// var x2 = new x(); +-// var y1 = new y(); +-// var z1 = new z(); ++// // --- (line: 19) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOfClassExpression01.ts === +@@= skipped -27, +26 lines =@@ + // } + // + // var y = class C extends x { +-// constructor() { +-// --- (line: 9) skipped --- ++// // --- (line: 8) skipped --- + + // --- (line: 16) skipped --- + // } +@@= skipped -11, +10 lines =@@ + // var y1 = new y(); + // var z1 = new z(); + ++ ++ + // === goToDefinition === + // === /goToDefinitionConstructorOfClassExpression01.ts === + // --- (line: 3) skipped --- +@@= skipped -22, +24 lines =@@ + // var x2 = new x(); + // var y1 = new /*GOTO DEF*/y(); + // var z1 = new z(); ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOfClassExpression01.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff new file mode 100644 index 0000000000..121dbc9a89 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc ++++ new.goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.ts === +-// namespace Foo { ++// namespace [|Foo|] { + // export var x; + // } + // \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff new file mode 100644 index 0000000000..2020c5db9c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff @@ -0,0 +1,49 @@ +--- old.goToDefinitionConstructorOverloads.baseline.jsonc ++++ new.goToDefinitionConstructorOverloads.baseline.jsonc +@@= skipped -9, +9 lines =@@ + // var constructorOverload = new ConstructorOverload("foo"); + // + // class Extended extends ConstructorOverload { +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOverloads.ts === +@@= skipped -15, +17 lines =@@ + // + // class Extended extends ConstructorOverload { + // readonly name = "extended"; +-// --- (line: 12) skipped --- ++// // --- (line: 12) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOverloads.ts === + // class ConstructorOverload { +-// /*GOTO DEF*/constructor(); +-// constructor(foo: string); ++// /*GOTO DEF*/[|constructor();|] ++// [|constructor(foo: string);|] + // [|constructor(foo: any) { }|] + // } + // + // var constructorOverload = new ConstructorOverload(); +-// --- (line: 8) skipped --- ++// // --- (line: 8) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOverloads.ts === +@@= skipped -29, +33 lines =@@ + // } + // var extended1 = new /*GOTO DEF*/Extended(); + // var extended2 = new Extended("foo"); ++ ++ + + // === goToDefinition === + // === /goToDefinitionConstructorOverloads.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff new file mode 100644 index 0000000000..f4470b6007 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionDecorator.baseline.jsonc ++++ new.goToDefinitionDecorator.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // method() {} + // } + ++ ++ + // === goToDefinition === + // === /a.ts === + // function decorator(target) { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff new file mode 100644 index 0000000000..95f70f24c2 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionDecoratorOverloads.baseline.jsonc ++++ new.goToDefinitionDecoratorOverloads.baseline.jsonc +@@= skipped -11, +11 lines =@@ + // @dec [s]() {} + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionDecoratorOverloads.ts === + // async function f() {} \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff new file mode 100644 index 0000000000..ced54446a8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff @@ -0,0 +1,12 @@ +--- old.goToDefinitionDestructuredRequire1.baseline.jsonc ++++ new.goToDefinitionDestructuredRequire1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /util.js === +-// class [|Util|] {} +-// module.exports = { Util }; ++// class Util {} ++// module.exports = { [|Util|] }; + + // === /index.js === + // const { Util } = require('./util'); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff new file mode 100644 index 0000000000..45ab8715af --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff @@ -0,0 +1,13 @@ +--- old.goToDefinitionDestructuredRequire2.baseline.jsonc ++++ new.goToDefinitionDestructuredRequire2.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === +-// === /util.js === +-// class [|Util|] {} +-// module.exports = { Util }; ++// === /reexport.js === ++// const { Util } = require('./util'); ++// module.exports = { [|Util|] }; + + // === /index.js === + // const { Util } = require('./reexport'); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff new file mode 100644 index 0000000000..b33b5d06b1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff @@ -0,0 +1,80 @@ +--- old.goToDefinitionDifferentFile.baseline.jsonc ++++ new.goToDefinitionDifferentFile.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionDifferentFile_Definition.ts === + // var [|remoteVariable|]; + // function remoteFunction() { } +@@= skipped -6, +6 lines =@@ + // module remoteModule{ export var foo = 1;} + + // === /goToDefinitionDifferentFile_Consumption.ts === +-// /*GOTO DEF POS*/remoteVariable = 1; ++// /*GOTO DEF*/remoteVariable = 1; + // remoteFunction(); + // var foo = new remoteClass(); + // class fooCls implements remoteInterface { } + // var fooVar = remoteModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionDifferentFile_Definition.ts === + // var remoteVariable; + // function [|remoteFunction|]() { } +@@= skipped -16, +18 lines =@@ + + // === /goToDefinitionDifferentFile_Consumption.ts === + // remoteVariable = 1; +-// /*GOTO DEF POS*/remoteFunction(); ++// /*GOTO DEF*/remoteFunction(); + // var foo = new remoteClass(); + // class fooCls implements remoteInterface { } + // var fooVar = remoteModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionDifferentFile_Definition.ts === + // var remoteVariable; + // function remoteFunction() { } +@@= skipped -16, +18 lines =@@ + // === /goToDefinitionDifferentFile_Consumption.ts === + // remoteVariable = 1; + // remoteFunction(); +-// var foo = new /*GOTO DEF POS*/remoteClass(); ++// var foo = new /*GOTO DEF*/remoteClass(); + // class fooCls implements remoteInterface { } + // var fooVar = remoteModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionDifferentFile_Definition.ts === + // var remoteVariable; + // function remoteFunction() { } +@@= skipped -16, +18 lines =@@ + // remoteVariable = 1; + // remoteFunction(); + // var foo = new remoteClass(); +-// class fooCls implements /*GOTO DEF POS*/remoteInterface { } ++// class fooCls implements /*GOTO DEF*/remoteInterface { } + // var fooVar = remoteModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionDifferentFile_Definition.ts === + // var remoteVariable; + // function remoteFunction() { } +@@= skipped -16, +18 lines =@@ + // remoteFunction(); + // var foo = new remoteClass(); + // class fooCls implements remoteInterface { } +-// var fooVar = /*GOTO DEF POS*/remoteModule.foo; ++// var fooVar = /*GOTO DEF*/remoteModule.foo; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff new file mode 100644 index 0000000000..16d769604b --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff @@ -0,0 +1,80 @@ +--- old.goToDefinitionDifferentFileIndirectly.baseline.jsonc ++++ new.goToDefinitionDifferentFileIndirectly.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /Remote2.ts === + // var [|rem2Var|]; + // function rem2Fn() { } +@@= skipped -6, +6 lines =@@ + // module rem2Mod { export var foo; } + + // === /Definition.ts === +-// /*GOTO DEF POS*/rem2Var = 1; ++// /*GOTO DEF*/rem2Var = 1; + // rem2Fn(); + // var rem2foo = new rem2Cls(); + // class rem2fooCls implements rem2Int { } + // var rem2fooVar = rem2Mod.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /Remote2.ts === + // var rem2Var; + // function [|rem2Fn|]() { } +@@= skipped -16, +18 lines =@@ + + // === /Definition.ts === + // rem2Var = 1; +-// /*GOTO DEF POS*/rem2Fn(); ++// /*GOTO DEF*/rem2Fn(); + // var rem2foo = new rem2Cls(); + // class rem2fooCls implements rem2Int { } + // var rem2fooVar = rem2Mod.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /Remote2.ts === + // var rem2Var; + // function rem2Fn() { } +@@= skipped -16, +18 lines =@@ + // === /Definition.ts === + // rem2Var = 1; + // rem2Fn(); +-// var rem2foo = new /*GOTO DEF POS*/rem2Cls(); ++// var rem2foo = new /*GOTO DEF*/rem2Cls(); + // class rem2fooCls implements rem2Int { } + // var rem2fooVar = rem2Mod.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /Remote2.ts === + // var rem2Var; + // function rem2Fn() { } +@@= skipped -16, +18 lines =@@ + // rem2Var = 1; + // rem2Fn(); + // var rem2foo = new rem2Cls(); +-// class rem2fooCls implements /*GOTO DEF POS*/rem2Int { } ++// class rem2fooCls implements /*GOTO DEF*/rem2Int { } + // var rem2fooVar = rem2Mod.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /Remote2.ts === + // var rem2Var; + // function rem2Fn() { } +@@= skipped -16, +18 lines =@@ + // rem2Fn(); + // var rem2foo = new rem2Cls(); + // class rem2fooCls implements rem2Int { } +-// var rem2fooVar = /*GOTO DEF POS*/rem2Mod.foo; ++// var rem2fooVar = /*GOTO DEF*/rem2Mod.foo; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff new file mode 100644 index 0000000000..e9e19b64a5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff @@ -0,0 +1,20 @@ +--- old.goToDefinitionDynamicImport1.baseline.jsonc ++++ new.goToDefinitionDynamicImport1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.ts === +-// [||]export function foo() { return "foo"; } ++// [|export function foo() { return "foo"; } + // import("./f/*GOTO DEF*/oo") +-// var x = import("./foo") ++// var x = import("./foo")|] ++ ++ + + // === goToDefinition === + // === /foo.ts === +-// [||]export function foo() { return "foo"; } ++// [|export function foo() { return "foo"; } + // import("./foo") +-// var x = import("./fo/*GOTO DEF*/o") ++// var x = import("./fo/*GOTO DEF*/o")|] \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff new file mode 100644 index 0000000000..4208658085 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionDynamicImport2.baseline.jsonc ++++ new.goToDefinitionDynamicImport2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff new file mode 100644 index 0000000000..0bce50da1f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionDynamicImport3.baseline.jsonc ++++ new.goToDefinitionDynamicImport3.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.ts === +-// export function [|bar|]() { return "bar"; } +-// import('./foo').then(({ ba/*GOTO DEF*/r }) => undefined); ++// export function bar() { return "bar"; } ++// import('./foo').then(({ [|ba/*GOTO DEF*/r|] }) => undefined); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff new file mode 100644 index 0000000000..2b4cd919e3 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionDynamicImport4.baseline.jsonc ++++ new.goToDefinitionDynamicImport4.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.ts === +-// export function [|bar|]() { return "bar"; } +-// import('./foo').then(({ ba/*GOTO DEF*/r }) => undefined); ++// export function bar() { return "bar"; } ++// import('./foo').then(({ [|ba/*GOTO DEF*/r|] }) => undefined); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff new file mode 100644 index 0000000000..26f0f785a6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionExpandoClass1.baseline.jsonc ++++ new.goToDefinitionExpandoClass1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff new file mode 100644 index 0000000000..326f915101 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionExpandoClass2.baseline.jsonc ++++ new.goToDefinitionExpandoClass2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff new file mode 100644 index 0000000000..a3d94cc4b8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff @@ -0,0 +1,8 @@ +--- old.goToDefinitionExpandoElementAccess.baseline.jsonc ++++ new.goToDefinitionExpandoElementAccess.baseline.jsonc +@@= skipped -1, +1 lines =@@ + // === /goToDefinitionExpandoElementAccess.ts === + // function f() {} + // f[[|"x"|]] = 0; +-// f[/*GOTO DEF*/[|{| textSpan: true, defId: 1 |}"x"|]] = 1; ++// f[/*GOTO DEF*/[|"x"|]] = 1; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc.diff new file mode 100644 index 0000000000..7bdd645b84 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionExternalModuleName.baseline.jsonc ++++ new.goToDefinitionExternalModuleName.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.ts === +-// [||]export class Foo {} ++// [|export class Foo {}|] + + // === /b.ts === + // import n = require([|'./a/*GOTO DEF*/'|]); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc.diff new file mode 100644 index 0000000000..674f3342a1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName2.baseline.jsonc.diff @@ -0,0 +1,12 @@ +--- old.goToDefinitionExternalModuleName2.baseline.jsonc ++++ new.goToDefinitionExternalModuleName2.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.ts === +-// [||]class Foo {} +-// export var x = 0; ++// [|class Foo {} ++// export var x = 0;|] + + // === /b.ts === + // import n = require([|'./a/*GOTO DEF*/'|]); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff new file mode 100644 index 0000000000..aa5bcb6a44 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionExternalModuleName3.baseline.jsonc ++++ new.goToDefinitionExternalModuleName3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName4.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff new file mode 100644 index 0000000000..a4a4c09881 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionExternalModuleName5.baseline.jsonc ++++ new.goToDefinitionExternalModuleName5.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.ts === +-// declare module [|{| textSpan: true |}"external/*GOTO DEF*/"|] { ++// declare module [|"external/*GOTO DEF*/"|] { + // class Foo { } + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff new file mode 100644 index 0000000000..bf095a19ca --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionExternalModuleName6.baseline.jsonc ++++ new.goToDefinitionExternalModuleName6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff new file mode 100644 index 0000000000..5feed253e6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionExternalModuleName7.baseline.jsonc ++++ new.goToDefinitionExternalModuleName7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff new file mode 100644 index 0000000000..ef3a497929 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionExternalModuleName8.baseline.jsonc ++++ new.goToDefinitionExternalModuleName8.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff new file mode 100644 index 0000000000..3a722bed28 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionExternalModuleName9.baseline.jsonc ++++ new.goToDefinitionExternalModuleName9.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff new file mode 100644 index 0000000000..2e4fbda436 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff @@ -0,0 +1,35 @@ +--- old.goToDefinitionFunctionOverloads.baseline.jsonc ++++ new.goToDefinitionFunctionOverloads.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // functionOverload("123"); + // functionOverload({}); + ++ ++ + // === goToDefinition === + // === /goToDefinitionFunctionOverloads.ts === + // function functionOverload(value: number); +@@= skipped -10, +12 lines =@@ + // /*GOTO DEF*/functionOverload("123"); + // functionOverload({}); + ++ ++ + // === goToDefinition === + // === /goToDefinitionFunctionOverloads.ts === + // function [|functionOverload|](value: number); +@@= skipped -10, +12 lines =@@ + // functionOverload("123"); + // /*GOTO DEF*/functionOverload({}); + ++ ++ + // === goToDefinition === + // === /goToDefinitionFunctionOverloads.ts === +-// function /*GOTO DEF*/functionOverload(value: number); +-// function functionOverload(value: string); ++// function /*GOTO DEF*/[|functionOverload|](value: number); ++// function [|functionOverload|](value: string); + // function [|functionOverload|]() {} + // + // functionOverload(123); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff new file mode 100644 index 0000000000..9237d53823 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff @@ -0,0 +1,32 @@ +--- old.goToDefinitionFunctionOverloadsInClass.baseline.jsonc ++++ new.goToDefinitionFunctionOverloadsInClass.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionFunctionOverloadsInClass.ts === + // class clsInOverload { +-// static fnOverload(); +-// static /*GOTO DEF*/fnOverload(foo: string); ++// static [|fnOverload|](); ++// static /*GOTO DEF*/[|fnOverload|](foo: string); + // static [|fnOverload|](foo: any) { } + // public fnOverload(): any; + // public fnOverload(foo: string); + // public fnOverload(foo: any) { return "foo" } +-// --- (line: 8) skipped --- ++// // --- (line: 8) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionFunctionOverloadsInClass.ts === +@@= skipped -14, +16 lines =@@ + // static fnOverload(); + // static fnOverload(foo: string); + // static fnOverload(foo: any) { } +-// public /*GOTO DEF*/fnOverload(): any; +-// public fnOverload(foo: string); ++// public /*GOTO DEF*/[|fnOverload|](): any; ++// public [|fnOverload|](foo: string); + // public [|fnOverload|](foo: any) { return "foo" } + // + // constructor() { } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff new file mode 100644 index 0000000000..3a06059477 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff @@ -0,0 +1,48 @@ +--- old.goToDefinitionFunctionType.baseline.jsonc ++++ new.goToDefinitionFunctionType.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionFunctionType.ts === + // const [|c|]: () => void; +-// /*GOTO DEF POS*/c(); ++// /*GOTO DEF*/c(); + // function test(cb: () => void) { + // cb(); + // } +-// --- (line: 6) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 6) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /goToDefinitionFunctionType.ts === + // const c: () => void; + // c(); + // function test([|cb|]: () => void) { +-// /*GOTO DEF POS*/cb(); ++// /*GOTO DEF*/cb(); + // } + // class C { + // prop: () => void; +-// --- (line: 8) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 8) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /goToDefinitionFunctionType.ts === + // --- (line: 3) skipped --- + // cb(); +@@= skipped -25, +29 lines =@@ + // class C { + // [|prop|]: () => void; + // m() { +-// this./*GOTO DEF POS*/prop(); ++// this./*GOTO DEF*/prop(); + // } + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff new file mode 100644 index 0000000000..5ea9bda7e3 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionImplicitConstructor.baseline.jsonc ++++ new.goToDefinitionImplicitConstructor.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionImplicitConstructor.ts === + // class [|ImplicitConstructor|] { + // } +-// var implicitConstructor = new /*GOTO DEF POS*/ImplicitConstructor(); ++// var implicitConstructor = new /*GOTO DEF*/ImplicitConstructor(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc.diff new file mode 100644 index 0000000000..a34d57636a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport1.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionImport1.baseline.jsonc ++++ new.goToDefinitionImport1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /b.ts === +-// [||]export const foo = 1; ++// [|export const foo = 1;|] + + // === /a.ts === + // import { foo } from [|"./b/*GOTO DEF*/"|]; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImport2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImport2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport2.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImport3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImport3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImport3.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff new file mode 100644 index 0000000000..6f0b8616e3 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames.baseline.jsonc ++++ new.goToDefinitionImportedNames.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff new file mode 100644 index 0000000000..58e4e82e9b --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.goToDefinitionImportedNames10.baseline.jsonc ++++ new.goToDefinitionImportedNames10.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.js === +-// class [|Class|] { +-// f; +-// } +-// module.exports.Class = Class; ++// class Class { ++// f; ++// } ++// module.exports.[|Class|] = Class; + + // === /b.js === + // const { Class } = require("./a"); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff new file mode 100644 index 0000000000..6c9473c207 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.goToDefinitionImportedNames11.baseline.jsonc ++++ new.goToDefinitionImportedNames11.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.js === +-// class [|Class|] { +-// f; +-// } +-// module.exports = { Class }; ++// class Class { ++// f; ++// } ++// module.exports = { [|Class|] }; + + // === /b.js === + // const { Class } = require("./a"); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff new file mode 100644 index 0000000000..78e6c001f6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames2.baseline.jsonc ++++ new.goToDefinitionImportedNames2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff new file mode 100644 index 0000000000..0353ad8cd1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff @@ -0,0 +1,23 @@ +--- old.goToDefinitionImportedNames3.baseline.jsonc ++++ new.goToDefinitionImportedNames3.baseline.jsonc +@@= skipped -9, +9 lines =@@ + // } + + // === /e.ts === +-// import {M, C, I} from "./d"; +-// var c = new /*GOTO DEF*/[|C|](); ++// import {M, C, I} from "./d"; ++// var c = new /*GOTO DEF*/[|C|](); ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -15, +17 lines =@@ + // } + + // === /e.ts === +-// import {M, /*GOTO DEF*/[|C|], I} from "./d"; +-// var c = new C(); ++// import {M, /*GOTO DEF*/[|C|], I} from "./d"; ++// var c = new C(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff new file mode 100644 index 0000000000..b76048bbc8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames4.baseline.jsonc ++++ new.goToDefinitionImportedNames4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff new file mode 100644 index 0000000000..e2e065b439 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames5.baseline.jsonc ++++ new.goToDefinitionImportedNames5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff new file mode 100644 index 0000000000..e684f37605 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames6.baseline.jsonc ++++ new.goToDefinitionImportedNames6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff new file mode 100644 index 0000000000..48b0105ddd --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames7.baseline.jsonc ++++ new.goToDefinitionImportedNames7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff new file mode 100644 index 0000000000..2f9b1acd25 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames8.baseline.jsonc ++++ new.goToDefinitionImportedNames8.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff new file mode 100644 index 0000000000..3e609bc487 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionImportedNames9.baseline.jsonc ++++ new.goToDefinitionImportedNames9.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff new file mode 100644 index 0000000000..5111564150 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff @@ -0,0 +1,41 @@ +--- old.goToDefinitionImports.baseline.jsonc ++++ new.goToDefinitionImports.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === ++// === /a.ts === ++// [|export default function f() {} ++// export const x = 0;|] ++ + // === /b.ts === + // import f, { x } from "./a"; +-// import * as [|a|] from "./a"; ++// import * as a from "./a"; + // import b = require("./b"); + // f; + // x; +-// /*GOTO DEF*/a; ++// /*GOTO DEF*/[|a|]; + // b; ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -21, +27 lines =@@ + // a; + // b; + ++ ++ + // === goToDefinition === + // === /a.ts === + // export default function f() {} +@@= skipped -13, +15 lines =@@ + // /*GOTO DEF*/[|x|]; + // a; + // b; ++ ++ + + // === goToDefinition === + // === /b.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff new file mode 100644 index 0000000000..24bff071c9 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff @@ -0,0 +1,91 @@ +--- old.goToDefinitionInMemberDeclaration.baseline.jsonc ++++ new.goToDefinitionInMemberDeclaration.baseline.jsonc +@@= skipped -12, +12 lines =@@ + // public _class: Foo = new Foo(); + // public _list: IFoo[]=[]; + // public _enum: Enum = Enum.value1; +-// --- (line: 14) skipped --- ++// // --- (line: 14) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionInMemberDeclaration.ts === +@@= skipped -8, +10 lines =@@ + // + // class Foo implements IFoo { + // public method1(): number { return 0; } +-// --- (line: 5) skipped --- ++// // --- (line: 5) skipped --- + + // --- (line: 8) skipped --- + // class Bar { +@@= skipped -10, +10 lines =@@ + // public _enum: Enum = Enum.value1; + // public _self: Bar; + // +-// --- (line: 16) skipped --- ++// // --- (line: 16) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionInMemberDeclaration.ts === +@@= skipped -8, +10 lines =@@ + // + // class Foo implements IFoo { + // public method1(): number { return 0; } +-// --- (line: 5) skipped --- ++// // --- (line: 5) skipped --- + + // --- (line: 12) skipped --- + // public _enum: Enum = Enum.value1; +@@= skipped -10, +10 lines =@@ + // } + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionInMemberDeclaration.ts === + // interface IFoo { method1(): number; } +@@= skipped -16, +18 lines =@@ + // public _list: IFoo[]=[]; + // public _enum: Enum = Enum.value1; + // public _self: Bar; +-// --- (line: 15) skipped --- ++// // --- (line: 15) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionInMemberDeclaration.ts === +@@= skipped -17, +19 lines =@@ + // public _class: Foo = new Foo(); + // public _list: IFoo[]=[]; + // public _enum: Enum = Enum.value1; +-// --- (line: 14) skipped --- ++// // --- (line: 14) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionInMemberDeclaration.ts === +@@= skipped -21, +23 lines =@@ + // } + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionInMemberDeclaration.ts === + // --- (line: 3) skipped --- +@@= skipped -18, +20 lines =@@ + // constructor(public _inConstructor: IFoo) { + // } + // } ++ ++ + + // === goToDefinition === + // === /goToDefinitionInMemberDeclaration.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff new file mode 100644 index 0000000000..8190c4be53 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff @@ -0,0 +1,25 @@ +--- old.goToDefinitionInTypeArgument.baseline.jsonc ++++ new.goToDefinitionInTypeArgument.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionInTypeArgument.ts === + // class Foo { } + // + // class [|Bar|] { } + // +-// var x = new Foo(); +- +-// === getDefinitionAtPosition === ++// var x = new Foo(); ++ ++ ++ ++// === goToDefinition === + // === /goToDefinitionInTypeArgument.ts === + // class [|Foo|] { } + // + // class Bar { } + // +-// var x = new Fo/*GOTO DEF POS*/o(); ++// var x = new Fo/*GOTO DEF*/o(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff new file mode 100644 index 0000000000..88429a8ba0 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff @@ -0,0 +1,40 @@ +--- old.goToDefinitionIndexSignature.baseline.jsonc ++++ new.goToDefinitionIndexSignature.baseline.jsonc +@@= skipped -14, +14 lines =@@ + // declare const ij: I | J; + // ij.foo; + // declare const k: K; +-// --- (line: 16) skipped --- ++// // --- (line: 16) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionIndexSignature.ts === +@@= skipped -23, +25 lines =@@ + // k.b; + // k.ab; + ++ ++ + // === goToDefinition === + // === /goToDefinitionIndexSignature.ts === + // --- (line: 4) skipped --- +@@= skipped -18, +20 lines =@@ + // k.b; + // k.ab; + ++ ++ + // === goToDefinition === + // === /goToDefinitionIndexSignature.ts === + // --- (line: 5) skipped --- +@@= skipped -16, +18 lines =@@ + // k.a; + // k./*GOTO DEF*/b; + // k.ab; ++ ++ + + // === goToDefinition === + // === /goToDefinitionIndexSignature.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionIndexSignature2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionIndexSignature2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature2.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff new file mode 100644 index 0000000000..12c0dd7aa1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionInstanceof1.baseline.jsonc ++++ new.goToDefinitionInstanceof1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff new file mode 100644 index 0000000000..d84e03c6b6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionInstanceof2.baseline.jsonc ++++ new.goToDefinitionInstanceof2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff new file mode 100644 index 0000000000..4f13f5e2c5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.goToDefinitionInterfaceAfterImplement.baseline.jsonc ++++ new.goToDefinitionInterfaceAfterImplement.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionInterfaceAfterImplement.ts === + // interface [|sInt|] { + // sVar: number; + // sFn: () => void; + // } + // +-// class iClass implements /*GOTO DEF POS*/sInt { ++// class iClass implements /*GOTO DEF*/sInt { + // public sVar = 1; + // public sFn() { + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc.diff new file mode 100644 index 0000000000..e7a9ed2657 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag1.baseline.jsonc.diff @@ -0,0 +1,12 @@ +--- old.goToDefinitionJsDocImportTag1.baseline.jsonc ++++ new.goToDefinitionJsDocImportTag1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === +-// === /b.ts === +-// [||]export interface A { } +- + // === /a.js === + // /** +-// * @import { A } from [|"./b/*GOTO DEF*/"|] ++// * @import { A } from "./b/*GOTO DEF*/" + // */ \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag2.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag3.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff new file mode 100644 index 0000000000..b7c17cb121 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionJsDocImportTag4.baseline.jsonc ++++ new.goToDefinitionJsDocImportTag4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff new file mode 100644 index 0000000000..fb406ad330 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionJsDocImportTag5.baseline.jsonc ++++ new.goToDefinitionJsDocImportTag5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff new file mode 100644 index 0000000000..d9f3621494 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff @@ -0,0 +1,20 @@ +--- old.goToDefinitionJsModuleExports.baseline.jsonc ++++ new.goToDefinitionJsModuleExports.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.js === +-// x.[|{| contextId: 0 |}test|] = () => { } ++// x.test = () => { } + // x./*GOTO DEF*/test(); + // x.test3 = function () { } + // x.test3(); + ++ ++ + // === goToDefinition === + // === /foo.js === + // x.test = () => { } + // x.test(); +-// x.[|{| contextId: 0 |}test3|] = function () { } ++// x.test3 = function () { } + // x./*GOTO DEF*/test3(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc.diff new file mode 100644 index 0000000000..3c044eec8c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleName.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionJsModuleName.baseline.jsonc ++++ new.goToDefinitionJsModuleName.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.js === +-// [||]module.exports = {}; ++// [|module.exports = {};|] + + // === /bar.js === + // var x = require(/*GOTO DEF*/[|"./foo"|]); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff new file mode 100644 index 0000000000..827fd960e6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff @@ -0,0 +1,75 @@ +--- old.goToDefinitionJsModuleNameAtImportName.baseline.jsonc ++++ new.goToDefinitionJsModuleNameAtImportName.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.js === +-// [|function notExported() { } +-// class Blah { +-// abc = 123; +-// } +-// module.exports.Blah = Blah;|] ++// [|function notExported() { } ++// class Blah { ++// abc = 123; ++// } ++// module.exports.Blah = Blah;|] + + // === /bar.js === + // const /*GOTO DEF*/[|BlahModule|] = require("./foo.js"); + // new BlahModule.Blah() + ++ ++ + // === goToDefinition === + // === /foo.js === +-// [|function notExported() { } +-// class Blah { +-// abc = 123; +-// } +-// module.exports.Blah = Blah;|] ++// [|function notExported() { } ++// class Blah { ++// abc = 123; ++// } ++// module.exports.Blah = Blah;|] + + // === /bar.js === + // const BlahModule = require("./foo.js"); + // new /*GOTO DEF*/[|BlahModule|].Blah() + ++ ++ + // === goToDefinition === + // === /foo.js === +-// [|function notExported() { } +-// class Blah { +-// abc = 123; +-// } +-// module.exports.Blah = Blah;|] ++// [|function notExported() { } ++// class Blah { ++// abc = 123; ++// } ++// module.exports.Blah = Blah;|] + + // === /barTs.ts === + // import /*GOTO DEF*/[|BlahModule|] = require("./foo.js"); + // new BlahModule.Blah() + ++ ++ + // === goToDefinition === + // === /foo.js === +-// [|function notExported() { } +-// class Blah { +-// abc = 123; +-// } +-// module.exports.Blah = Blah;|] ++// [|function notExported() { } ++// class Blah { ++// abc = 123; ++// } ++// module.exports.Blah = Blah;|] + + // === /barTs.ts === + // import BlahModule = require("./foo.js"); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff new file mode 100644 index 0000000000..f7d634d7c6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff @@ -0,0 +1,21 @@ +--- old.goToDefinitionJsxCall.baseline.jsonc ++++ new.goToDefinitionJsxCall.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /test.tsx === + // interface FC

{ +-// (props: P, context?: any): string; ++// [|(props: P, context?: any): string;|] + // } + // + // const [|Thing|]: FC = (props) =>

; +-// const HelloWorld = () => ; +- +-// === /./test.tsx === +-// interface FC

{ +-// (props: P, context?: any): string; +-// } +-// +-// const Thing: FC = (props) =>

; +-// const HelloWorld = () => ; ++// const HelloWorld = () => ; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff new file mode 100644 index 0000000000..a386007e41 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionJsxNotSet.baseline.jsonc ++++ new.goToDefinitionJsxNotSet.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.jsx === +-// const [|{| contextId: 0 |}Foo|] = () => ( ++// const [|Foo|] = () => ( + //
foo
+ // ); + // export default Foo; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff new file mode 100644 index 0000000000..39d131df77 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff @@ -0,0 +1,29 @@ +--- old.goToDefinitionLabels.baseline.jsonc ++++ new.goToDefinitionLabels.baseline.jsonc +@@= skipped -8, +8 lines =@@ + // } + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionLabels.ts === + // label1: while (true) { +@@= skipped -11, +13 lines =@@ + // } + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionLabels.ts === + // [|label1|]: while (true) { +@@= skipped -10, +12 lines =@@ + // continue unknownLabel; + // } + // } ++ ++ + + // === goToDefinition === + // === /goToDefinitionLabels.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff new file mode 100644 index 0000000000..fc0bf093dd --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionMember.baseline.jsonc ++++ new.goToDefinitionMember.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.ts === + // class A { +-// private [|{| textSpan: true |}z|]/*GOTO DEF*/: string; ++// private [|z|]/*GOTO DEF*/: string; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff new file mode 100644 index 0000000000..759fec02d4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionMetaProperty.baseline.jsonc ++++ new.goToDefinitionMetaProperty.baseline.jsonc +@@= skipped -23, +23 lines =@@ + // import.meta; + // function [|f|]() { new.t/*GOTO DEF*/arget; } + ++ ++ + // === goToDefinition === + // === /b.ts === + // im/*GOTO DEF*/port.m; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff new file mode 100644 index 0000000000..58cdfed6a5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff @@ -0,0 +1,67 @@ +--- old.goToDefinitionMethodOverloads.baseline.jsonc ++++ new.goToDefinitionMethodOverloads.baseline.jsonc +@@= skipped -15, +15 lines =@@ + // methodOverload.method(); + // methodOverload.method("456"); + ++ ++ + // === goToDefinition === + // === /goToDefinitionMethodOverloads.ts === + // class MethodOverload { +@@= skipped -18, +20 lines =@@ + // methodOverload.method(); + // methodOverload.method("456"); + ++ ++ + // === goToDefinition === + // === /goToDefinitionMethodOverloads.ts === + // class MethodOverload { +@@= skipped -18, +20 lines =@@ + // methodOverload./*GOTO DEF*/method(); + // methodOverload.method("456"); + ++ ++ + // === goToDefinition === + // === /goToDefinitionMethodOverloads.ts === + // class MethodOverload { +@@= skipped -18, +20 lines =@@ + // methodOverload.method(); + // methodOverload./*GOTO DEF*/method("456"); + ++ ++ + // === goToDefinition === + // === /goToDefinitionMethodOverloads.ts === + // class MethodOverload { +-// static /*GOTO DEF*/method(); +-// static method(foo: string); ++// static /*GOTO DEF*/[|method|](); ++// static [|method|](foo: string); + // static [|method|](foo?: any) { } + // public method(): any; + // public method(foo: string); + // public method(foo?: any) { return "foo" } +-// --- (line: 8) skipped --- ++// // --- (line: 8) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionMethodOverloads.ts === +@@= skipped -17, +21 lines =@@ + // static method(); + // static method(foo: string); + // static method(foo?: any) { } +-// public /*GOTO DEF*/method(): any; +-// public method(foo: string); ++// public /*GOTO DEF*/[|method|](): any; ++// public [|method|](foo: string); + // public [|method|](foo?: any) { return "foo" } + // } + // // static method + // MethodOverload.method(); +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff new file mode 100644 index 0000000000..8fceb51392 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff @@ -0,0 +1,200 @@ +--- old.goToDefinitionModifiers.baseline.jsonc ++++ new.goToDefinitionModifiers.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // + // private z: string; + // +-// readonly x: string; +-// +-// async a() { } +-// +-// override b() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } ++// // --- (line: 5) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === +-// export class [|{| textSpan: true |}A|]/*GOTO DEF*/ { ++// export class [|A|]/*GOTO DEF*/ { + // + // private z: string; + // +-// readonly x: string; +-// +-// async a() { } +-// +-// override b() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } ++// // --- (line: 5) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -36, +22 lines =@@ + // + // readonly x: string; + // +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === + // export class A { + // +-// private [|{| textSpan: true |}z|]/*GOTO DEF*/: string; ++// private [|z|]/*GOTO DEF*/: string; + // + // readonly x: string; + // +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -22, +26 lines =@@ + // + // async a() { } + // +-// --- (line: 9) skipped --- ++// // --- (line: 9) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -8, +10 lines =@@ + // + // private z: string; + // +-// readonly [|{| textSpan: true |}x|]/*GOTO DEF*/: string; ++// readonly [|x|]/*GOTO DEF*/: string; + // + // async a() { } + // +-// --- (line: 9) skipped --- ++// // --- (line: 9) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -16, +18 lines =@@ + // + // override b() {} + // +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -8, +10 lines =@@ + // + // readonly x: string; + // +-// async [|{| textSpan: true |}a|]/*GOTO DEF*/() { } ++// async [|a|]/*GOTO DEF*/() { } + // + // override b() {} + // +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -19, +21 lines =@@ + // + // export function foo() { } + ++ ++ + // === goToDefinition === + // === /a.ts === + // --- (line: 5) skipped --- + // + // async a() { } + // +-// override [|{| textSpan: true |}b|]/*GOTO DEF*/() {} ++// override [|b|]/*GOTO DEF*/() {} + // + // public async c() { } + // } + // + // export function foo() { } ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -24, +28 lines =@@ + // + // export function foo() { } + ++ ++ + // === goToDefinition === + // === /a.ts === + // --- (line: 7) skipped --- +@@= skipped -11, +13 lines =@@ + // + // export function foo() { } + ++ ++ + // === goToDefinition === + // === /a.ts === + // --- (line: 7) skipped --- +@@= skipped -11, +13 lines =@@ + // + // export function foo() { } + ++ ++ + // === goToDefinition === + // === /a.ts === + // --- (line: 7) skipped --- + // + // override b() {} + // +-// public async [|{| textSpan: true |}c|]/*GOTO DEF*/() { } ++// public async [|c|]/*GOTO DEF*/() { } + // } + // + // export function foo() { } ++ ++ + + // === goToDefinition === + // === /a.ts === +@@= skipped -19, +23 lines =@@ + // + // exp/*GOTO DEF*/ort function [|foo|]() { } + ++ ++ + // === goToDefinition === + // === /a.ts === + // --- (line: 10) skipped --- + // public async c() { } + // } + // +-// export function [|{| textSpan: true |}foo|]/*GOTO DEF*/() { } ++// export function [|foo|]/*GOTO DEF*/() { } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff new file mode 100644 index 0000000000..33e2a8fec1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionMultipleDefinitions.baseline.jsonc ++++ new.goToDefinitionMultipleDefinitions.baseline.jsonc +@@= skipped -14, +14 lines =@@ + // + // var ifoo: IFo/*GOTO DEF*/o; + ++ ++ + // === goToDefinition === + // === /c.ts === + // module [|Module|] { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff new file mode 100644 index 0000000000..36db31a3e4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionNewExpressionTargetNotClass.baseline.jsonc ++++ new.goToDefinitionNewExpressionTargetNotClass.baseline.jsonc +@@= skipped -9, +9 lines =@@ + // }; + // new I2(); + ++ ++ + // === goToDefinition === + // === /goToDefinitionNewExpressionTargetNotClass.ts === + // --- (line: 3) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff new file mode 100644 index 0000000000..69340ae062 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc ++++ new.goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff new file mode 100644 index 0000000000..11c0fd32f6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff @@ -0,0 +1,80 @@ +--- old.goToDefinitionObjectLiteralProperties.baseline.jsonc ++++ new.goToDefinitionObjectLiteralProperties.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionObjectLiteralProperties.ts === + // var o = { + // [|value|]: 0, +@@= skipped -7, +7 lines =@@ + // es6StyleMethod() { } + // }; + // +-// o./*GOTO DEF POS*/value; ++// o./*GOTO DEF*/value; + // o.getter; + // o.setter; + // o.method; + // o.es6StyleMethod; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionObjectLiteralProperties.ts === + // var o = { + // value: 0, +@@= skipped -17, +19 lines =@@ + // }; + // + // o.value; +-// o./*GOTO DEF POS*/getter; ++// o./*GOTO DEF*/getter; + // o.setter; + // o.method; + // o.es6StyleMethod; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionObjectLiteralProperties.ts === + // var o = { + // value: 0, +@@= skipped -17, +19 lines =@@ + // + // o.value; + // o.getter; +-// o./*GOTO DEF POS*/setter; ++// o./*GOTO DEF*/setter; + // o.method; + // o.es6StyleMethod; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionObjectLiteralProperties.ts === + // var o = { + // value: 0, +@@= skipped -17, +19 lines =@@ + // o.value; + // o.getter; + // o.setter; +-// o./*GOTO DEF POS*/method; ++// o./*GOTO DEF*/method; + // o.es6StyleMethod; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionObjectLiteralProperties.ts === + // var o = { + // value: 0, +@@= skipped -17, +19 lines =@@ + // o.getter; + // o.setter; + // o.method; +-// o./*GOTO DEF POS*/es6StyleMethod; ++// o./*GOTO DEF*/es6StyleMethod; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff new file mode 100644 index 0000000000..331d1a126c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionObjectLiteralProperties1.baseline.jsonc ++++ new.goToDefinitionObjectLiteralProperties1.baseline.jsonc +@@= skipped -11, +11 lines =@@ + // propx: 10 + // }) + ++ ++ + // === goToDefinition === + // === /goToDefinitionObjectLiteralProperties1.ts === + // interface PropsBag { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff new file mode 100644 index 0000000000..b1870db4d2 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionObjectSpread.baseline.jsonc ++++ new.goToDefinitionObjectSpread.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff new file mode 100644 index 0000000000..4f2e92d135 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc ++++ new.goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff new file mode 100644 index 0000000000..b95133f957 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember1.baseline.jsonc ++++ new.goToDefinitionOverriddenMember1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember10.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember10.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember10.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember10.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff new file mode 100644 index 0000000000..1113a9f7ff --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff @@ -0,0 +1,18 @@ +--- old.goToDefinitionOverriddenMember11.baseline.jsonc ++++ new.goToDefinitionOverriddenMember11.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.js === + // class Foo { +-// [|m|]() {} ++// m() {} + // } + // class Bar extends Foo { + // /** @over/*GOTO DEF*/ride see {@link https://test.com} description */ + // m() {} + // } ++ ++ + + // === goToDefinition === + // === /a.js === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff new file mode 100644 index 0000000000..bc48197ca5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember12.baseline.jsonc ++++ new.goToDefinitionOverriddenMember12.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff new file mode 100644 index 0000000000..e7d8ec0eac --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember13.baseline.jsonc ++++ new.goToDefinitionOverriddenMember13.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff new file mode 100644 index 0000000000..5cfb1e2fea --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember14.baseline.jsonc ++++ new.goToDefinitionOverriddenMember14.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff new file mode 100644 index 0000000000..cf25cbfc7d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember15.baseline.jsonc ++++ new.goToDefinitionOverriddenMember15.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff new file mode 100644 index 0000000000..ec2e33eed4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff @@ -0,0 +1,8 @@ +--- old.goToDefinitionOverriddenMember16.baseline.jsonc ++++ new.goToDefinitionOverriddenMember16.baseline.jsonc +@@= skipped -5, +5 lines =@@ + // * @returns {{}} + // */ + // static foo() { +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff new file mode 100644 index 0000000000..ac455c8167 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.goToDefinitionOverriddenMember17.baseline.jsonc ++++ new.goToDefinitionOverriddenMember17.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionOverriddenMember17.ts === +-// const entityKind = Symbol.for("drizzle:entityKind"); +-// +-// abstract class MySqlColumn { +-// static readonly [|[entityKind]|]: string = "MySqlColumn"; ++// --- (line: 4) skipped --- + // } + // + // export class MySqlVarBinary extends MySqlColumn { +-// static /*GOTO DEF*/override readonly [entityKind]: string = "MySqlVarBinary"; ++// static /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary"; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff new file mode 100644 index 0000000000..f48708137a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.goToDefinitionOverriddenMember18.baseline.jsonc ++++ new.goToDefinitionOverriddenMember18.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionOverriddenMember18.ts === +-// const entityKind = Symbol.for("drizzle:entityKind"); +-// +-// abstract class MySqlColumn { +-// readonly [|[entityKind]|]: string = "MySqlColumn"; ++// --- (line: 4) skipped --- + // } + // + // export class MySqlVarBinary extends MySqlColumn { +-// /*GOTO DEF*/override readonly [entityKind]: string = "MySqlVarBinary"; ++// /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary"; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff new file mode 100644 index 0000000000..9a27c18cd0 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.goToDefinitionOverriddenMember19.baseline.jsonc ++++ new.goToDefinitionOverriddenMember19.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionOverriddenMember19.ts === +-// const prop = "foo" as const; +-// +-// abstract class A { +-// static readonly [|[prop]|] = "A"; ++// --- (line: 4) skipped --- + // } + // + // export class B extends A { +-// static /*GOTO DEF*/override readonly [prop] = "B"; ++// static /*GOTO DEF*/override readonly [|[prop]|] = "B"; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff new file mode 100644 index 0000000000..906c482793 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember2.baseline.jsonc ++++ new.goToDefinitionOverriddenMember2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff new file mode 100644 index 0000000000..b0ac65ad8e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.goToDefinitionOverriddenMember20.baseline.jsonc ++++ new.goToDefinitionOverriddenMember20.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionOverriddenMember20.ts === +-// const prop = "foo" as const; +-// +-// abstract class A { +-// readonly [|[prop]|] = "A"; ++// --- (line: 4) skipped --- + // } + // + // export class B extends A { +-// /*GOTO DEF*/override readonly [prop] = "B"; ++// /*GOTO DEF*/override readonly [|[prop]|] = "B"; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff new file mode 100644 index 0000000000..40c4bfc79c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember21.baseline.jsonc ++++ new.goToDefinitionOverriddenMember21.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff new file mode 100644 index 0000000000..dca39d5776 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember22.baseline.jsonc ++++ new.goToDefinitionOverriddenMember22.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff new file mode 100644 index 0000000000..c788c80d2e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember23.baseline.jsonc ++++ new.goToDefinitionOverriddenMember23.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff new file mode 100644 index 0000000000..bb9c116c92 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember24.baseline.jsonc ++++ new.goToDefinitionOverriddenMember24.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff new file mode 100644 index 0000000000..93099ea461 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember25.baseline.jsonc ++++ new.goToDefinitionOverriddenMember25.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff new file mode 100644 index 0000000000..75887b3425 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember26.baseline.jsonc ++++ new.goToDefinitionOverriddenMember26.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff new file mode 100644 index 0000000000..0baafb9609 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember3.baseline.jsonc ++++ new.goToDefinitionOverriddenMember3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff new file mode 100644 index 0000000000..ed33aa0626 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember4.baseline.jsonc ++++ new.goToDefinitionOverriddenMember4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff new file mode 100644 index 0000000000..1459886dc6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember5.baseline.jsonc ++++ new.goToDefinitionOverriddenMember5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff new file mode 100644 index 0000000000..bbd2a2cbb4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember6.baseline.jsonc ++++ new.goToDefinitionOverriddenMember6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff new file mode 100644 index 0000000000..00f5639aac --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember7.baseline.jsonc ++++ new.goToDefinitionOverriddenMember7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff new file mode 100644 index 0000000000..142adc2083 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionOverriddenMember8.baseline.jsonc ++++ new.goToDefinitionOverriddenMember8.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // [|m|]() {} + // } + +-// === /./b.ts === ++// === /b.ts === + // import { A } from "./a"; + // class B extends A { + // /*GOTO DEF*/[|override|] m() {} \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff new file mode 100644 index 0000000000..c35654b29d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionOverriddenMember9.baseline.jsonc ++++ new.goToDefinitionOverriddenMember9.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff new file mode 100644 index 0000000000..5f586b9210 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionPartialImplementation.baseline.jsonc ++++ new.goToDefinitionPartialImplementation.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPrimitives.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrimitives.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPrimitives.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrimitives.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff new file mode 100644 index 0000000000..ebd1df3911 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff @@ -0,0 +1,20 @@ +--- old.goToDefinitionPrivateName.baseline.jsonc ++++ new.goToDefinitionPrivateName.baseline.jsonc +@@= skipped -11, +11 lines =@@ + // } + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionPrivateName.ts === + // class A { +@@= skipped -13, +15 lines =@@ + // this.#prop + // } + // } ++ ++ + + // === goToDefinition === + // === /goToDefinitionPrivateName.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff new file mode 100644 index 0000000000..f28e7d061e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionPropertyAssignment.baseline.jsonc ++++ new.goToDefinitionPropertyAssignment.baseline.jsonc +@@= skipped -6, +6 lines =@@ + // + // Component.displayName + ++ ++ + // === goToDefinition === + // === /goToDefinitionPropertyAssignment.ts === + // export const Component = () => { return "OK"} \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff new file mode 100644 index 0000000000..ccc0f33abf --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionRest.baseline.jsonc ++++ new.goToDefinitionRest.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff new file mode 100644 index 0000000000..d25d07b9b2 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionReturn1.baseline.jsonc ++++ new.goToDefinitionReturn1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff new file mode 100644 index 0000000000..243cbb6aa6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionReturn2.baseline.jsonc ++++ new.goToDefinitionReturn2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff new file mode 100644 index 0000000000..78702cb697 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionReturn3.baseline.jsonc ++++ new.goToDefinitionReturn3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn4.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff new file mode 100644 index 0000000000..2b305b072b --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionReturn5.baseline.jsonc ++++ new.goToDefinitionReturn5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff new file mode 100644 index 0000000000..bf0e22d1ab --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionReturn6.baseline.jsonc ++++ new.goToDefinitionReturn6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff new file mode 100644 index 0000000000..388e307742 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionReturn7.baseline.jsonc ++++ new.goToDefinitionReturn7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff new file mode 100644 index 0000000000..c167a0f7cf --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff @@ -0,0 +1,80 @@ +--- old.goToDefinitionSameFile.baseline.jsonc ++++ new.goToDefinitionSameFile.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionSameFile.ts === + // var [|localVariable|]; + // function localFunction() { } +@@= skipped -6, +6 lines =@@ + // module localModule{ export var foo = 1;} + // + // +-// /*GOTO DEF POS*/localVariable = 1; ++// /*GOTO DEF*/localVariable = 1; + // localFunction(); + // var foo = new localClass(); + // class fooCls implements localInterface { } + // var fooVar = localModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionSameFile.ts === + // var localVariable; + // function [|localFunction|]() { } +@@= skipped -16, +18 lines =@@ + // + // + // localVariable = 1; +-// /*GOTO DEF POS*/localFunction(); ++// /*GOTO DEF*/localFunction(); + // var foo = new localClass(); + // class fooCls implements localInterface { } + // var fooVar = localModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionSameFile.ts === + // var localVariable; + // function localFunction() { } +@@= skipped -16, +18 lines =@@ + // + // localVariable = 1; + // localFunction(); +-// var foo = new /*GOTO DEF POS*/localClass(); ++// var foo = new /*GOTO DEF*/localClass(); + // class fooCls implements localInterface { } + // var fooVar = localModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionSameFile.ts === + // var localVariable; + // function localFunction() { } +@@= skipped -16, +18 lines =@@ + // localVariable = 1; + // localFunction(); + // var foo = new localClass(); +-// class fooCls implements /*GOTO DEF POS*/localInterface { } ++// class fooCls implements /*GOTO DEF*/localInterface { } + // var fooVar = localModule.foo; + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /goToDefinitionSameFile.ts === + // var localVariable; + // function localFunction() { } +@@= skipped -16, +18 lines =@@ + // localFunction(); + // var foo = new localClass(); + // class fooCls implements localInterface { } +-// var fooVar = /*GOTO DEF POS*/localModule.foo; ++// var fooVar = /*GOTO DEF*/localModule.foo; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff new file mode 100644 index 0000000000..7e2bf068e2 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff @@ -0,0 +1,17 @@ +--- old.goToDefinitionSatisfiesExpression1.baseline.jsonc ++++ new.goToDefinitionSatisfiesExpression1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionSatisfiesExpression1.ts === + // const STRINGS = { +-// /*GOTO DEF*/[|{| textSpan: true |}title|]: 'A Title', ++// /*GOTO DEF*/[|title|]: 'A Title', + // } satisfies Record; + // + // //somewhere in app + // STRINGS.title ++ ++ + + // === goToDefinition === + // === /goToDefinitionSatisfiesExpression1.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff new file mode 100644 index 0000000000..884e65b545 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff @@ -0,0 +1,24 @@ +--- old.goToDefinitionScriptImport.baseline.jsonc ++++ new.goToDefinitionScriptImport.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === +-// === /scriptThing.ts === +-// [||]console.log("woooo side effects") +- + // === /moduleThing.ts === +-// import /*GOTO DEF*/[|"./scriptThing"|]; ++// import /*GOTO DEF*/"./scriptThing"; + // import "./stylez.css"; + ++ ++ + // === goToDefinition === +-// === /stylez.css === +-// [||]div { +-// color: magenta; +-// } +- + // === /moduleThing.ts === + // import "./scriptThing"; +-// import /*GOTO DEF*/[|"./stylez.css"|]; ++// import /*GOTO DEF*/"./stylez.css"; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff new file mode 100644 index 0000000000..a52c078060 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff @@ -0,0 +1,53 @@ +--- old.goToDefinitionScriptImportServer.baseline.jsonc ++++ new.goToDefinitionScriptImportServer.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === +-// === /home/src/workspaces/project/scriptThing.ts === +-// [||]console.log("woooo side effects") +- +-// === /home/src/workspaces/project/moduleThing.ts === +-// import /*GOTO DEF*/[|"./scriptThing"|]; +-// import "./stylez.css"; +-// import "./foo.txt"; +- +-// === goToDefinition === +-// === /home/src/workspaces/project/stylez.css === +-// [||]div { +-// color: magenta; +-// } +- +-// === /home/src/workspaces/project/moduleThing.ts === +-// import "./scriptThing"; +-// import /*GOTO DEF*/[|"./stylez.css"|]; +-// import "./foo.txt"; +- +-// === goToDefinition === +-// === /home/src/workspaces/project/foo.txt === +-// Unavailable file content: +-// textSpan: {"start":0,"length":0} +- +- +-// === /home/src/workspaces/project/moduleThing.ts === +-// import "./scriptThing"; +-// import "./stylez.css"; +-// import /*GOTO DEF*/[|"./foo.txt"|]; ++// === /home/src/workspaces/project/moduleThing.ts === ++// import /*GOTO DEF*/"./scriptThing"; ++// import "./stylez.css"; ++// import "./foo.txt"; ++ ++ ++ ++// === goToDefinition === ++// === /home/src/workspaces/project/moduleThing.ts === ++// import "./scriptThing"; ++// import /*GOTO DEF*/"./stylez.css"; ++// import "./foo.txt"; ++ ++ ++ ++// === goToDefinition === ++// === /home/src/workspaces/project/moduleThing.ts === ++// import "./scriptThing"; ++// import "./stylez.css"; ++// import /*GOTO DEF*/"./foo.txt"; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff new file mode 100644 index 0000000000..d6d3b0c240 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff @@ -0,0 +1,12 @@ +--- old.goToDefinitionShadowVariable.baseline.jsonc ++++ new.goToDefinitionShadowVariable.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionShadowVariable.ts === + // var shadowVariable = "foo"; + // function shadowVariableTestModule() { + // var [|shadowVariable|]; +-// /*GOTO DEF POS*/shadowVariable = 1; ++// /*GOTO DEF*/shadowVariable = 1; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff new file mode 100644 index 0000000000..d81cd87eab --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionShadowVariableInsideModule.baseline.jsonc ++++ new.goToDefinitionShadowVariableInsideModule.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /goToDefinitionShadowVariableInsideModule.ts === + // module shdModule { + // var [|shdVar|]; +-// /*GOTO DEF POS*/shdVar = 1; ++// /*GOTO DEF*/shdVar = 1; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff new file mode 100644 index 0000000000..73b3ae3d89 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff @@ -0,0 +1,36 @@ +--- old.goToDefinitionShorthandProperty01.baseline.jsonc ++++ new.goToDefinitionShorthandProperty01.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionShorthandProperty01.ts === +-// var [|name|] = "hello"; ++// var name = "hello"; + // var id = 100000; + // declare var id; +-// var obj = {/*GOTO DEF*/name, id}; ++// var obj = {/*GOTO DEF*/[|name|], id}; + // obj.name; + // obj.id; ++ ++ + + // === goToDefinition === + // === /goToDefinitionShorthandProperty01.ts === +@@= skipped -15, +17 lines =@@ + // obj.name; + // obj.id; + ++ ++ + // === goToDefinition === + // === /goToDefinitionShorthandProperty01.ts === + // var name = "hello"; +@@= skipped -8, +10 lines =@@ + // var obj = {[|name|], id}; + // obj./*GOTO DEF*/name; + // obj.id; ++ ++ + + // === goToDefinition === + // === /goToDefinitionShorthandProperty01.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty02.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty02.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty02.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff new file mode 100644 index 0000000000..e13569c6f4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionShorthandProperty03.baseline.jsonc ++++ new.goToDefinitionShorthandProperty03.baseline.jsonc +@@= skipped -6, +6 lines =@@ + // y + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionShorthandProperty03.ts === + // var x = { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff new file mode 100644 index 0000000000..29a6dab0e8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionShorthandProperty04.baseline.jsonc ++++ new.goToDefinitionShorthandProperty04.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionShorthandProperty04.ts === + // interface Foo { +-// [|foo|](): void ++// foo(): void + // } + // + // let x: Foo = { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff new file mode 100644 index 0000000000..a39c35ce2f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionShorthandProperty05.baseline.jsonc ++++ new.goToDefinitionShorthandProperty05.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionShorthandProperty05.ts === + // interface Foo { +-// [|foo|](): void ++// foo(): void + // } + // const [|foo|] = 1; + // let x: Foo = { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff new file mode 100644 index 0000000000..3d033eafae --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionShorthandProperty06.baseline.jsonc ++++ new.goToDefinitionShorthandProperty06.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff new file mode 100644 index 0000000000..f722be7ede --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff @@ -0,0 +1,21 @@ +--- old.goToDefinitionSignatureAlias_require.baseline.jsonc ++++ new.goToDefinitionSignatureAlias_require.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.js === +-// module.exports = function [|f|]() {} ++// [|module.exports = function [|f|]() {}|] + + // === /b.js === + // const f = require("./a"); + // /*GOTO DEF*/[|f|](); + ++ ++ + // === goToDefinition === + // === /a.js === +-// module.exports = function [|f|]() {} ++// [|module.exports = function [|f|]() {}|] + + // === /bar.ts === + // import f = require("./a"); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff new file mode 100644 index 0000000000..b83a7c8fd3 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff @@ -0,0 +1,22 @@ +--- old.goToDefinitionSimple.baseline.jsonc ++++ new.goToDefinitionSimple.baseline.jsonc +@@= skipped -2, +2 lines =@@ + // class [|c|] { } + + // === /Consumption.ts === +-// var n = new /*GOTO DEF*/[|c|](); +-// var n = new c(); ++// var n = new /*GOTO DEF*/[|c|](); ++// var n = new c(); ++ ++ + + // === goToDefinition === + // === /Definition.ts === + // class [|c|] { } + + // === /Consumption.ts === +-// var n = new c(); +-// var n = new [|c|]/*GOTO DEF*/(); ++// var n = new c(); ++// var n = new [|c|]/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff new file mode 100644 index 0000000000..0c60b7b842 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff @@ -0,0 +1,41 @@ +--- old.goToDefinitionSourceUnit.baseline.jsonc ++++ new.goToDefinitionSourceUnit.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /a.ts === +-// //MyFile Comments +-// //more comments +-// /// +-// /// ++// //MyFile Comments ++// //more comments ++// /// ++// /// + // +-// class clsInOverload { +-// --- (line: 7) skipped --- ++// class clsInOverload { ++// // --- (line: 7) skipped --- + + + + // === goToDefinition === +-// === /b.ts === +-// [||] +- + // === /a.ts === +-// //MyFile Comments +-// //more comments +-// /// +-// /// ++// //MyFile Comments ++// //more comments ++// /// ++// /// + // +-// class clsInOverload { +-// static fnOverload(); +-// --- (line: 8) skipped --- ++// class clsInOverload { ++// static fnOverload(); ++// // --- (line: 8) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff new file mode 100644 index 0000000000..f12de40ccd --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionSwitchCase1.baseline.jsonc ++++ new.goToDefinitionSwitchCase1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff new file mode 100644 index 0000000000..0a84d8a3a4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionSwitchCase2.baseline.jsonc ++++ new.goToDefinitionSwitchCase2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff new file mode 100644 index 0000000000..e3105da4ee --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionSwitchCase3.baseline.jsonc ++++ new.goToDefinitionSwitchCase3.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // }; + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionSwitchCase3.ts === + // switch (null) { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff new file mode 100644 index 0000000000..ae16aea7f7 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionSwitchCase4.baseline.jsonc ++++ new.goToDefinitionSwitchCase4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff new file mode 100644 index 0000000000..306d824c92 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionSwitchCase5.baseline.jsonc ++++ new.goToDefinitionSwitchCase5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff new file mode 100644 index 0000000000..bb6e07e5b1 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff @@ -0,0 +1,24 @@ +--- old.goToDefinitionSwitchCase6.baseline.jsonc ++++ new.goToDefinitionSwitchCase6.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionSwitchCase6.ts === +-// export default { /*GOTO DEF*/[|{| textSpan: true |}case|] }; ++// export default { /*GOTO DEF*/[|case|] }; + // default; + // case 42; + ++ ++ + // === goToDefinition === + // === /goToDefinitionSwitchCase6.ts === +-// [|export default { case }; ++// export default { case }; + // /*GOTO DEF*/default; +-// case 42;|] ++// case 42; ++ ++ + + // === goToDefinition === + // === /goToDefinitionSwitchCase6.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff new file mode 100644 index 0000000000..617f89533a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionSwitchCase7.baseline.jsonc ++++ new.goToDefinitionSwitchCase7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff new file mode 100644 index 0000000000..642d012910 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionTaggedTemplateOverloads.baseline.jsonc ++++ new.goToDefinitionTaggedTemplateOverloads.baseline.jsonc +@@= skipped -6, +6 lines =@@ + // /*GOTO DEF*/f`${0}`; + // f`${false}`; + ++ ++ + // === goToDefinition === + // === /goToDefinitionTaggedTemplateOverloads.ts === + // function f(strs: TemplateStringsArray, x: number): void; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff new file mode 100644 index 0000000000..05c6b26b5a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff @@ -0,0 +1,20 @@ +--- old.goToDefinitionThis.baseline.jsonc ++++ new.goToDefinitionThis.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // get self(this: number) { return this; } + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionThis.ts === + // function f(this: number) { +@@= skipped -9, +11 lines =@@ + // constructor() { return /*GOTO DEF*/this; } + // get self(this: number) { return this; } + // } ++ ++ + + // === goToDefinition === + // === /goToDefinitionThis.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff new file mode 100644 index 0000000000..a61857db41 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionTypeOnlyImport.baseline.jsonc ++++ new.goToDefinitionTypeOnlyImport.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff new file mode 100644 index 0000000000..160190656a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionTypePredicate.baseline.jsonc ++++ new.goToDefinitionTypePredicate.baseline.jsonc +@@= skipped -4, +4 lines =@@ + // return typeof parameter === "string"; + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionTypePredicate.ts === + // class [|A|] {} \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc.diff new file mode 100644 index 0000000000..9df7799d14 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeReferenceDirective.baseline.jsonc.diff @@ -0,0 +1,12 @@ +--- old.goToDefinitionTypeReferenceDirective.baseline.jsonc ++++ new.goToDefinitionTypeReferenceDirective.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === +-// === /src/types/lib/index.d.ts === +-// [||]declare let $: {x: number}; +- + // === /src/app.ts === +-// /// +-// $.x; ++// /// ++// $.x; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff new file mode 100644 index 0000000000..bf5ad15a53 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff @@ -0,0 +1,20 @@ +--- old.goToDefinitionTypeofThis.baseline.jsonc ++++ new.goToDefinitionTypeofThis.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // get self(this: number) { type X = typeof this; } + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionTypeofThis.ts === + // function f(this: number) { +@@= skipped -9, +11 lines =@@ + // constructor() { type X = typeof /*GOTO DEF*/this; } + // get self(this: number) { type X = typeof this; } + // } ++ ++ + + // === goToDefinition === + // === /goToDefinitionTypeofThis.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUndefinedSymbols.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUndefinedSymbols.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUndefinedSymbols.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUndefinedSymbols.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff new file mode 100644 index 0000000000..39e4b27456 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionUnionTypeProperty1.baseline.jsonc ++++ new.goToDefinitionUnionTypeProperty1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff new file mode 100644 index 0000000000..5739a5b250 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionUnionTypeProperty2.baseline.jsonc ++++ new.goToDefinitionUnionTypeProperty2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff new file mode 100644 index 0000000000..2669ee9a09 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionUnionTypeProperty3.baseline.jsonc ++++ new.goToDefinitionUnionTypeProperty3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff new file mode 100644 index 0000000000..9ee6558ce0 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionUnionTypeProperty4.baseline.jsonc ++++ new.goToDefinitionUnionTypeProperty4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff new file mode 100644 index 0000000000..c60910e83e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff @@ -0,0 +1,31 @@ +--- old.goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc ++++ new.goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc +@@= skipped -16, +16 lines =@@ + // prop: 0, + // }; + // const u2: U = { +-// --- (line: 18) skipped --- ++// // --- (line: 18) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionUnionTypeProperty_discriminated.ts === +@@= skipped -25, +27 lines =@@ + // prop: 0, + // }; + ++ ++ + // === goToDefinition === + // === /goToDefinitionUnionTypeProperty_discriminated.ts === + // type U = A | B; +@@= skipped -22, +24 lines =@@ + // /*GOTO DEF*/kind: "bogus", + // prop: 0, + // }; ++ ++ + + // === goToDefinition === + // === /goToDefinitionUnionTypeProperty_discriminated.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff new file mode 100644 index 0000000000..63e720b99c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionVariableAssignment.baseline.jsonc ++++ new.goToDefinitionVariableAssignment.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.js === + // const Bar; +-// const Foo = [|{| contextId: 0 |}Bar|] = function () {} ++// const [|Foo|] = [|Bar|] = function () {} + // Foo.prototype.bar = function() {} + // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff new file mode 100644 index 0000000000..da4919f33a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionVariableAssignment1.baseline.jsonc ++++ new.goToDefinitionVariableAssignment1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.js === +-// const Foo = module.[|{| contextId: 0 |}exports|] = function () {} ++// const [|Foo|] = module.[|exports|] = function () {} + // Foo.prototype.bar = function() {} + // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff new file mode 100644 index 0000000000..fd8556f28d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionVariableAssignment2.baseline.jsonc ++++ new.goToDefinitionVariableAssignment2.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.ts === + // const Bar; +-// const Foo = [|{| contextId: 0 |}Bar|] = function () {} ++// const [|Foo|] = [|Bar|] = function () {} + // Foo.prototype.bar = function() {} + // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff new file mode 100644 index 0000000000..7f43425fc8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionVariableAssignment3.baseline.jsonc ++++ new.goToDefinitionVariableAssignment3.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.ts === +-// const Foo = module.[|{| contextId: 0 |}exports|] = function () {} ++// const [|Foo|] = module.[|exports|] = function () {} + // Foo.prototype.bar = function() {} + // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff new file mode 100644 index 0000000000..0a30135d83 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff @@ -0,0 +1,18 @@ +--- old.goToDefinitionYield1.baseline.jsonc ++++ new.goToDefinitionYield1.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // yield 0; + // } + ++ ++ + // === goToDefinition === + // === /goToDefinitionYield1.ts === + // function* gen() { + // yield 0; + // } + // +-// const [|{| contextId: 0 |}genFunction|] = function*() { ++// const [|genFunction|] = function*() { + // /*GOTO DEF*/yield 0; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff new file mode 100644 index 0000000000..902c09c657 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionYield2.baseline.jsonc ++++ new.goToDefinitionYield2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff new file mode 100644 index 0000000000..296e3d0228 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff @@ -0,0 +1,15 @@ +--- old.goToDefinitionYield3.baseline.jsonc ++++ new.goToDefinitionYield3.baseline.jsonc +@@= skipped -5, +5 lines =@@ + // } + // + // foo*() { +-// yield 0; +-// } +-// } ++// // --- (line: 7) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinitionYield3.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff new file mode 100644 index 0000000000..1005ecbef6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinitionYield4.baseline.jsonc ++++ new.goToDefinitionYield4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff new file mode 100644 index 0000000000..9e2b3ed2cc --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff @@ -0,0 +1,13 @@ +--- old.goToDefinition_filteringGenericMappedType.baseline.jsonc ++++ new.goToDefinition_filteringGenericMappedType.baseline.jsonc +@@= skipped -4, +4 lines =@@ + // return 1; + // }, + // name: "test", +-// }; +-// +-// --- (line: 8) skipped --- ++// // --- (line: 6) skipped --- + + // --- (line: 17) skipped --- + // name: true, \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff new file mode 100644 index 0000000000..b4218ec467 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinition_filteringMappedType.baseline.jsonc ++++ new.goToDefinition_filteringMappedType.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff new file mode 100644 index 0000000000..ef1c65b0ae --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinition_mappedType.baseline.jsonc ++++ new.goToDefinition_mappedType.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff new file mode 100644 index 0000000000..87a6a32571 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff @@ -0,0 +1,24 @@ +--- old.goToDefinition_super.baseline.jsonc ++++ new.goToDefinition_super.baseline.jsonc +@@= skipped -10, +10 lines =@@ + // } + // method() { + // super.x(); +-// --- (line: 12) skipped --- ++// // --- (line: 12) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinition_super.ts === +@@= skipped -18, +20 lines =@@ + // } + // } + // class D { +-// --- (line: 15) skipped --- ++// // --- (line: 15) skipped --- ++ ++ + + // === goToDefinition === + // === /goToDefinition_super.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff new file mode 100644 index 0000000000..00e4d3179d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToDefinition_untypedModule.baseline.jsonc ++++ new.goToDefinition_untypedModule.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff new file mode 100644 index 0000000000..09f4886c6a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToModuleAliasDefinition.baseline.jsonc ++++ new.goToModuleAliasDefinition.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /b.ts === +-// import [|n|] = require('a'); +-// var x = new /*GOTO DEF*/n.Foo(); ++// import [|n|] = require('a'); ++// var x = new /*GOTO DEF*/n.Foo(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff new file mode 100644 index 0000000000..45ea42463f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToTypeDefinition4.baseline.jsonc ++++ new.goToTypeDefinition4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff new file mode 100644 index 0000000000..d1d546f983 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.gotoDefinitionConstructorFunction.baseline.jsonc ++++ new.gotoDefinitionConstructorFunction.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff new file mode 100644 index 0000000000..71fbd8f805 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff @@ -0,0 +1,15 @@ +--- old.gotoDefinitionInObjectBindingPattern1.baseline.jsonc ++++ new.gotoDefinitionInObjectBindingPattern1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /gotoDefinitionInObjectBindingPattern1.ts === +-// function bar(onfulfilled: (value: T) => void) { +-// return undefined; +-// } ++// --- (line: 3) skipped --- + // interface Test { +-// [|prop2|]: number ++// prop2: number + // } +-// bar(({pr/*GOTO DEF*/op2})=>{}); ++// bar(({[|pr/*GOTO DEF*/op2|]})=>{}); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff new file mode 100644 index 0000000000..a84199dbea --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff @@ -0,0 +1,24 @@ +--- old.gotoDefinitionInObjectBindingPattern2.baseline.jsonc ++++ new.gotoDefinitionInObjectBindingPattern2.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /gotoDefinitionInObjectBindingPattern2.ts === +-// var p0 = ({a/*GOTO DEF*/a}) => {console.log(aa)}; ++// var p0 = ({[|a/*GOTO DEF*/a|]}) => {console.log(aa)}; + // function f2({ a1, b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} + + +@@= skipped -7, +7 lines =@@ + // === goToDefinition === + // === /gotoDefinitionInObjectBindingPattern2.ts === + // var p0 = ({aa}) => {console.log(aa)}; +-// function f2({ a/*GOTO DEF*/1, b1 }: { [|a1|]: number, b1: number } = { a1: 0, b1: 0 }) {} ++// function f2({ [|a/*GOTO DEF*/1|], b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} ++ ++ + + // === goToDefinition === + // === /gotoDefinitionInObjectBindingPattern2.ts === + // var p0 = ({aa}) => {console.log(aa)}; +-// function f2({ a1, b/*GOTO DEF*/1 }: { a1: number, [|b1|]: number } = { a1: 0, b1: 0 }) {} ++// function f2({ a1, [|b/*GOTO DEF*/1|] }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff new file mode 100644 index 0000000000..043fffb0bb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff @@ -0,0 +1,145 @@ +--- old.gotoDefinitionLinkTag1.baseline.jsonc ++++ new.gotoDefinitionLinkTag1.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /foo.ts === + // interface [|Foo|] { + // foo: string +@@= skipped -7, +7 lines =@@ + // baz: Foo + // } + // } +-// /** {@link /*GOTO DEF POS*/Foo} foooo*/ ++// /** {@link /*GOTO DEF*/Foo} foooo*/ + // const a = "" + // /** {@link NS.Bar} ns.bar*/ + // const b = "" +-// --- (line: 13) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 13) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /foo.ts === + // interface Foo { + // foo: string +@@= skipped -18, +20 lines =@@ + // } + // /** {@link Foo} foooo*/ + // const a = "" +-// /** {@link NS./*GOTO DEF POS*/Bar} ns.bar*/ ++// /** {@link NS./*GOTO DEF*/Bar} ns.bar*/ + // const b = "" + // /** {@link Foo f1}*/ + // const c = "" +-// --- (line: 15) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 15) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /foo.ts === + // interface [|Foo|] { + // foo: string + // } + // namespace NS { +-// export interface Bar { +-// baz: Foo +-// } +-// } +-// /** {@link Foo} foooo*/ ++// // --- (line: 5) skipped --- ++ ++// --- (line: 9) skipped --- + // const a = "" + // /** {@link NS.Bar} ns.bar*/ + // const b = "" +-// /** {@link /*GOTO DEF POS*/Foo f1}*/ ++// /** {@link /*GOTO DEF*/Foo f1}*/ + // const c = "" + // /** {@link NS.Bar ns.bar}*/ + // const d = "" +-// --- (line: 17) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 17) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /foo.ts === + // interface Foo { + // foo: string +@@= skipped -42, +44 lines =@@ + // const b = "" + // /** {@link Foo f1}*/ + // const c = "" +-// /** {@link NS./*GOTO DEF POS*/Bar ns.bar}*/ ++// /** {@link NS./*GOTO DEF*/Bar ns.bar}*/ + // const d = "" + // /** {@link d }dd*/ + // const e = "" + // /** @param x {@link Foo} */ + // function foo(x) { } + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /foo.ts === + // --- (line: 12) skipped --- + // /** {@link Foo f1}*/ + // const c = "" + // /** {@link NS.Bar ns.bar}*/ + // const [|d|] = "" +-// /** {@link /*GOTO DEF POS*/d }dd*/ ++// /** {@link /*GOTO DEF*/d }dd*/ + // const e = "" + // /** @param x {@link Foo} */ + // function foo(x) { } + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /foo.ts === + // interface [|Foo|] { + // foo: string + // } + // namespace NS { +-// export interface Bar { +-// baz: Foo +-// --- (line: 7) skipped --- ++// // --- (line: 5) skipped --- + + // --- (line: 15) skipped --- + // const d = "" + // /** {@link d }dd*/ + // const e = "" +-// /** @param x {@link /*GOTO DEF POS*/Foo} */ ++// /** @param x {@link /*GOTO DEF*/Foo} */ + // function foo(x) { } + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /foo.ts === + // interface [|Foo|] { + // foo: string + // } + // namespace NS { +-// export interface Bar { +-// baz: Foo +-// --- (line: 7) skipped --- ++// // --- (line: 5) skipped --- + + // === /bar.ts === +-// /** {@link /*GOTO DEF POS*/Foo }dd*/ ++// /** {@link /*GOTO DEF*/Foo }dd*/ + // const f = "" \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff new file mode 100644 index 0000000000..14d60790b9 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.gotoDefinitionLinkTag2.baseline.jsonc ++++ new.gotoDefinitionLinkTag2.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /gotoDefinitionLinkTag2.ts === + // enum E { +-// /** {@link /*GOTO DEF POS*/A} */ ++// /** {@link /*GOTO DEF*/A} */ + // [|A|] + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff new file mode 100644 index 0000000000..ac83789992 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.gotoDefinitionLinkTag3.baseline.jsonc ++++ new.gotoDefinitionLinkTag3.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /a.ts === + // enum E { +-// /** {@link /*GOTO DEF POS*/Foo} */ +-// Foo ++// /** {@link /*GOTO DEF*/Foo} */ ++// [|Foo|] + // } +-// interface [|Foo|] { ++// interface Foo { + // foo: E.Foo; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff new file mode 100644 index 0000000000..0a459889aa --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff @@ -0,0 +1,17 @@ +--- old.gotoDefinitionLinkTag4.baseline.jsonc ++++ new.gotoDefinitionLinkTag4.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === +-// === /a.ts === +-// interface [|Foo|] { +-// foo: E.Foo; +-// } +- ++// === goToDefinition === + // === /b.ts === + // enum E { +-// /** {@link /*GOTO DEF POS*/Foo} */ +-// Foo ++// /** {@link /*GOTO DEF*/Foo} */ ++// [|Foo|] + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff new file mode 100644 index 0000000000..d62705827f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff @@ -0,0 +1,12 @@ +--- old.gotoDefinitionLinkTag5.baseline.jsonc ++++ new.gotoDefinitionLinkTag5.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /gotoDefinitionLinkTag5.ts === + // enum E { +-// /** {@link /*GOTO DEF POS*/B} */ ++// /** {@link /*GOTO DEF*/B} */ + // A, + // [|B|] + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff new file mode 100644 index 0000000000..aef5cc1f93 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.gotoDefinitionLinkTag6.baseline.jsonc ++++ new.gotoDefinitionLinkTag6.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /gotoDefinitionLinkTag6.ts === + // enum E { +-// /** {@link E./*GOTO DEF POS*/A} */ ++// /** {@link E./*GOTO DEF*/A} */ + // [|A|] + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff new file mode 100644 index 0000000000..ff82f11c8f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc ++++ new.gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc +@@= skipped -6, +6 lines =@@ + // class C extends (foo())./*GOTO DEF*/B {} + // class C1 extends foo().B {} + ++ ++ + // === goToDefinition === + // === /gotoDefinitionPropertyAccessExpressionHeritageClause.ts === + // class B {} \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff new file mode 100644 index 0000000000..02c99e8ec4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff @@ -0,0 +1,14 @@ +--- old.gotoDefinitionSatisfiesTag.baseline.jsonc ++++ new.gotoDefinitionSatisfiesTag.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /a.js === + // /** + // * @typedef {Object} [|T|] + // * @property {number} a + // */ + // +-// /** @satisfies {/*GOTO DEF POS*/T} comment */ ++// /** @satisfies {/*GOTO DEF*/T} comment */ + // const foo = { a: 1 }; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff new file mode 100644 index 0000000000..308a842f16 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff @@ -0,0 +1,14 @@ +--- old.gotoDefinitionThrowsTag.baseline.jsonc ++++ new.gotoDefinitionThrowsTag.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /gotoDefinitionThrowsTag.ts === +-// class [|E|] extends Error {} ++// class E extends Error {} + // + // /** +-// * @throws {/*GOTO DEF POS*/E} ++// * @throws {/*GOTO DEF*/E} + // */ + // function f() {} \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff new file mode 100644 index 0000000000..b58aad13e7 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff @@ -0,0 +1,56 @@ +--- old.importTypeNodeGoToDefinition.baseline.jsonc ++++ new.importTypeNodeGoToDefinition.baseline.jsonc +@@= skipped -9, +9 lines =@@ + // type A = typeof import(/*GOTO DEF*/[|"./ns"|]).Foo.Bar; + // type B = import("./ns").Foo.Bar.Baz; + ++ ++ + // === goToDefinition === + // === /ns.ts === + // export namespace [|Foo|] { +@@= skipped -12, +14 lines =@@ + // type A = typeof import("./ns")./*GOTO DEF*/[|Foo|].Bar; + // type B = import("./ns").Foo.Bar.Baz; + ++ ++ + // === goToDefinition === + // === /ns.ts === + // export namespace Foo { +@@= skipped -12, +14 lines =@@ + // type A = typeof import("./ns").Foo./*GOTO DEF*/[|Bar|]; + // type B = import("./ns").Foo.Bar.Baz; + ++ ++ + // === goToDefinition === + // === /ns.ts === + // [|export namespace Foo { +@@= skipped -12, +14 lines =@@ + // type A = typeof import("./ns").Foo.Bar; + // type B = import(/*GOTO DEF*/[|"./ns"|]).Foo.Bar.Baz; + ++ ++ + // === goToDefinition === + // === /ns.ts === + // export namespace [|Foo|] { +@@= skipped -12, +14 lines =@@ + // type A = typeof import("./ns").Foo.Bar; + // type B = import("./ns")./*GOTO DEF*/[|Foo|].Bar.Baz; + ++ ++ + // === goToDefinition === + // === /ns.ts === + // export namespace Foo { +@@= skipped -11, +13 lines =@@ + // === /usage.ts === + // type A = typeof import("./ns").Foo.Bar; + // type B = import("./ns").Foo./*GOTO DEF*/[|Bar|].Baz; ++ ++ + + // === goToDefinition === + // === /ns.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff new file mode 100644 index 0000000000..dbf7f7909f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.javaScriptClass3.baseline.jsonc ++++ new.javaScriptClass3.baseline.jsonc +@@= skipped -10, +10 lines =@@ + // x.alpha/*GOTO DEF*/; + // x.beta; + ++ ++ + // === goToDefinition === + // === /Foo.js === + // class Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/jsDocSee1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/jsDocSee1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff new file mode 100644 index 0000000000..1f4772cd6b --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff @@ -0,0 +1,99 @@ +--- old.jsDocSee1.baseline.jsonc ++++ new.jsDocSee1.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /jsDocSee1.ts === + // interface [|Foo|] { + // foo: string +@@= skipped -7, +7 lines =@@ + // baz: Foo + // } + // } +-// /** @see {/*GOTO DEF POS*/Foo} foooo*/ ++// /** @see {/*GOTO DEF*/Foo} foooo*/ + // const a = "" + // /** @see {NS.Bar} ns.bar*/ + // const b = "" +-// --- (line: 13) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 13) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /jsDocSee1.ts === + // interface Foo { + // foo: string +@@= skipped -18, +20 lines =@@ + // } + // /** @see {Foo} foooo*/ + // const a = "" +-// /** @see {NS./*GOTO DEF POS*/Bar} ns.bar*/ ++// /** @see {NS./*GOTO DEF*/Bar} ns.bar*/ + // const b = "" + // /** @see Foo f1*/ + // const c = "" +-// --- (line: 15) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 15) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /jsDocSee1.ts === + // interface [|Foo|] { + // foo: string + // } + // namespace NS { +-// export interface Bar { +-// baz: Foo +-// } +-// } +-// /** @see {Foo} foooo*/ ++// // --- (line: 5) skipped --- ++ ++// --- (line: 9) skipped --- + // const a = "" + // /** @see {NS.Bar} ns.bar*/ + // const b = "" +-// /** @see /*GOTO DEF POS*/Foo f1*/ ++// /** @see /*GOTO DEF*/Foo f1*/ + // const c = "" + // /** @see NS.Bar ns.bar*/ + // const d = "" + // /** @see d dd*/ + // const e = "" + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /jsDocSee1.ts === + // interface Foo { + // foo: string +@@= skipped -43, +45 lines =@@ + // const b = "" + // /** @see Foo f1*/ + // const c = "" +-// /** @see NS./*GOTO DEF POS*/Bar ns.bar*/ ++// /** @see NS./*GOTO DEF*/Bar ns.bar*/ + // const d = "" + // /** @see d dd*/ + // const e = "" + +-// === getDefinitionAtPosition === ++ ++ ++// === goToDefinition === + // === /jsDocSee1.ts === + // --- (line: 12) skipped --- + // /** @see Foo f1*/ + // const c = "" + // /** @see NS.Bar ns.bar*/ + // const [|d|] = "" +-// /** @see /*GOTO DEF POS*/d dd*/ ++// /** @see /*GOTO DEF*/d dd*/ + // const e = "" \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/jsDocSee2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/jsDocSee2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff new file mode 100644 index 0000000000..a29ac1298e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff @@ -0,0 +1,47 @@ +--- old.jsDocSee2.baseline.jsonc ++++ new.jsDocSee2.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // const a = "" + // /** @see {@bar} invalid tag*/ + // const b = "" +-// --- (line: 5) skipped --- ++// // --- (line: 5) skipped --- + + + +@@= skipped -12, +12 lines =@@ + // const b = "" + // /** @see foooo unknown reference without brace*/ + // const c = "" +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- + + + +@@= skipped -14, +14 lines =@@ + // const c = "" + // /** @see @bar invalid tag without brace*/ + // const d = "" +-// --- (line: 9) skipped --- ++// // --- (line: 9) skipped --- + + + +@@= skipped -14, +14 lines =@@ + // const d = "" + // /** @see {d@fff} partial reference */ + // const e = "" +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- + + + +@@= skipped -17, +17 lines =@@ + // const f = "" + // /** @see d@{fff} partial reference */ + // const g = "" ++ ++ + + // === goToDefinition === + // === /jsDocSee2.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/jsDocSee3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/jsDocSee3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff new file mode 100644 index 0000000000..346a664645 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff @@ -0,0 +1,16 @@ +--- old.jsDocSee3.baseline.jsonc ++++ new.jsDocSee3.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /jsDocSee3.ts === +-// function foo (a: string) { ++// function foo ([|a|]: string) { + // /** +-// * @see {/*GOTO DEF POS*/a} ++// * @see {/*GOTO DEF*/a} + // */ +-// function bar ([|a|]: string) { ++// function bar (a: string) { + // } + // } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/jsDocSee4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/jsDocSee4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff new file mode 100644 index 0000000000..15d9ca7bbb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff @@ -0,0 +1,55 @@ +--- old.jsDocSee4.baseline.jsonc ++++ new.jsDocSee4.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /jsDocSee4.ts === + // class [|A|] { + // foo () { } + // } + // declare const a: A; + // /** +-// * @see {/*GOTO DEF POS*/A#foo} ++// * @see {/*GOTO DEF*/A#foo} + // */ + // const t1 = 1 + // /** +-// --- (line: 10) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 10) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /jsDocSee4.ts === + // class A { + // foo () { } +@@= skipped -21, +23 lines =@@ + // */ + // const t1 = 1 + // /** +-// * @see {/*GOTO DEF POS*/a.foo()} ++// * @see {/*GOTO DEF*/a.foo()} + // */ + // const t2 = 1 + // /** +-// --- (line: 14) skipped --- +- +-// === getDefinitionAtPosition === ++// // --- (line: 14) skipped --- ++ ++ ++ ++// === goToDefinition === + // === /jsDocSee4.ts === + // class A { + // foo () { } +@@= skipped -21, +23 lines =@@ + // */ + // const t2 = 1 + // /** +-// * @see {@link /*GOTO DEF POS*/a.foo()} ++// * @see {@link /*GOTO DEF*/a.foo()} + // */ + // const t3 = 1 \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff new file mode 100644 index 0000000000..30b8262e61 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.jsdocTypedefTagGoToDefinition.baseline.jsonc ++++ new.jsdocTypedefTagGoToDefinition.baseline.jsonc +@@= skipped -15, +15 lines =@@ + // /** @type {Animal} */ + // var animal; animal.animalName + ++ ++ + // === goToDefinition === + // === /jsdocCompletion_typedef.js === + // --- (line: 4) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff new file mode 100644 index 0000000000..5baaa73ba0 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.jsxSpreadReference.baseline.jsonc ++++ new.jsxSpreadReference.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff new file mode 100644 index 0000000000..0ba07fa433 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff @@ -0,0 +1,14 @@ +--- old.qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc ++++ new.qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc +@@= skipped --1, +0 lines =@@ ++// === goToDefinition === ++// === /qualifiedName_import_declaration_with_variable_entity_names.ts === ++// module Alpha { ++// export var [|x|] = 100; ++// } ++// ++// module Beta { ++// import p = Alpha./*GOTO DEF*/x; ++// } ++// ++// var x = Alpha.x \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff new file mode 100644 index 0000000000..687762b7d8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff @@ -0,0 +1,583717 @@ +--- old.reallyLargeFile.baseline.jsonc ++++ new.reallyLargeFile.baseline.jsonc +@@= skipped -0, +0 lines =@@ +-// === getDefinitionAtPosition === ++// === goToDefinition === + // === /file.d.ts === +-// namespace /*GOTO DEF POS*/[|Foo|] { +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// //// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// //// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// //// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// //// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// //// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// +-// } ++// namespace /*GOTO DEF*/[|Foo|] { ++// ++// ++// ++// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff new file mode 100644 index 0000000000..3965aab18c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff @@ -0,0 +1,20 @@ +--- old.tsxGoToDefinitionClasses.baseline.jsonc ++++ new.tsxGoToDefinitionClasses.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // var y = ; + // var z = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 4) skipped --- +@@= skipped -12, +14 lines =@@ + // var x = ; + // var y = ; + // var z = ; ++ ++ + + // === goToDefinition === + // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff new file mode 100644 index 0000000000..3b8b2f1158 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff @@ -0,0 +1,20 @@ +--- old.tsxGoToDefinitionIntrinsics.baseline.jsonc ++++ new.tsxGoToDefinitionIntrinsics.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // var y = ; + // var z =
; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 4) skipped --- +@@= skipped -12, +14 lines =@@ + // var x =
; + // var y = ; + // var z =
; ++ ++ + + // === goToDefinition === + // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff new file mode 100644 index 0000000000..f5f70a721f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff @@ -0,0 +1,47 @@ +--- old.tsxGoToDefinitionStatelessFunction1.baseline.jsonc ++++ new.tsxGoToDefinitionStatelessFunction1.baseline.jsonc +@@= skipped -9, +9 lines =@@ + // let opt2 = ; + // let opt3 = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 8) skipped --- +@@= skipped -12, +14 lines =@@ + // let opt2 = ; + // let opt3 = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 8) skipped --- +@@= skipped -12, +14 lines =@@ + // let opt2 = ; + // let opt3 = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 8) skipped --- +@@= skipped -12, +14 lines =@@ + // let opt2 = ; + // let opt3 = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 4) skipped --- +@@= skipped -15, +17 lines =@@ + // let opt1 = ; + // let opt2 = ; + // let opt3 = ; ++ ++ + + // === goToDefinition === + // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff new file mode 100644 index 0000000000..29cba45db7 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff @@ -0,0 +1,47 @@ +--- old.tsxGoToDefinitionStatelessFunction2.baseline.jsonc ++++ new.tsxGoToDefinitionStatelessFunction2.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // let opt = ; + // let opt = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 13) skipped --- +@@= skipped -16, +18 lines =@@ + // let opt = ; + // let opt = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 13) skipped --- +@@= skipped -16, +18 lines =@@ + // let opt = ; + // let opt = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 13) skipped --- +@@= skipped -16, +18 lines =@@ + // let opt = ; + // let opt = ; + ++ ++ + // === goToDefinition === + // === /file.tsx === + // --- (line: 14) skipped --- +@@= skipped -14, +16 lines =@@ + // let opt = {}} ignore-prop />; + // let opt =
; + // let opt = ; ++ ++ + + // === goToDefinition === + // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff new file mode 100644 index 0000000000..3df558c554 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.tsxGoToDefinitionUnionElementType1.baseline.jsonc ++++ new.tsxGoToDefinitionUnionElementType1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff new file mode 100644 index 0000000000..a3464bb0ab --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.tsxGoToDefinitionUnionElementType2.baseline.jsonc ++++ new.tsxGoToDefinitionUnionElementType2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc new file mode 100644 index 0000000000..46695f64be --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /goToImplementationClassMethod_00.ts === +// class Bar { +// [|hello|]() {} +// } +// +// new Bar().hel/*GOTO IMPL*/lo; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff new file mode 100644 index 0000000000..aed291dd32 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationClassMethod_00.baseline.jsonc ++++ new.goToImplementationClassMethod_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc new file mode 100644 index 0000000000..80db702094 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc @@ -0,0 +1,29 @@ +// === goToImplementation === +// === /goToImplementationClassMethod_01.ts === +// abstract class AbstractBar { +// abstract hello(): void; +// } +// +// class Bar extends AbstractBar{ +// [|hello|]() {} +// } +// +// function whatever(x: AbstractBar) { +// x.he/*GOTO IMPL*/llo(); +// } + + + +// === goToImplementation === +// === /goToImplementationClassMethod_01.ts === +// abstract class AbstractBar { +// abstract he/*GOTO IMPL*/llo(): void; +// } +// +// class Bar extends AbstractBar{ +// [|hello|]() {} +// } +// +// function whatever(x: AbstractBar) { +// x.hello(); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff new file mode 100644 index 0000000000..031ec1b27a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationClassMethod_01.baseline.jsonc ++++ new.goToImplementationClassMethod_01.baseline.jsonc +@@= skipped -11, +11 lines =@@ + // x.he/*GOTO IMPL*/llo(); + // } + ++ ++ + // === goToImplementation === + // === /goToImplementationClassMethod_01.ts === + // abstract class AbstractBar { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc new file mode 100644 index 0000000000..4ca595865c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc @@ -0,0 +1,8 @@ +// === goToImplementation === +// === /goToImplementationEnum_00.ts === +// enum Foo { +// [|Foo1|] = function initializer() { return 5 } (), +// Foo2 = 6 +// } +// +// Foo.Fo/*GOTO IMPL*/o1; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff new file mode 100644 index 0000000000..d2d6834b4c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationEnum_00.baseline.jsonc ++++ new.goToImplementationEnum_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc new file mode 100644 index 0000000000..3fba1d4a17 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc @@ -0,0 +1,8 @@ +// === goToImplementation === +// === /goToImplementationEnum_01.ts === +// enum [|Foo|] { +// Foo1 = function initializer() { return 5 } (), +// Foo2 = 6 +// } +// +// Fo/*GOTO IMPL*/o; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff new file mode 100644 index 0000000000..71107258ac --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationEnum_01.baseline.jsonc ++++ new.goToImplementationEnum_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc new file mode 100644 index 0000000000..c509d17b99 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc @@ -0,0 +1,43 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_00.ts === +// interface Foo { +// hello: () => void +// } +// +// var bar: Foo = { [|hello|]: helloImpl }; +// var baz: Foo = { "[|hello|]": helloImpl }; +// +// function helloImpl () {} +// +// function whatever(x: Foo = { [|hello|]() {/**1*/} }) { +// x.he/*GOTO IMPL*/llo() +// } +// +// class Bar { +// x: Foo = { [|hello|]() {} } +// +// constructor(public f: Foo = { [|hello|]() {/**3*/} } ) {} +// } + + + +// === goToImplementation === +// === /goToImplementationInterfaceMethod_00.ts === +// interface Foo { +// he/*GOTO IMPL*/llo: () => void +// } +// +// var bar: Foo = { [|hello|]: helloImpl }; +// var baz: Foo = { "[|hello|]": helloImpl }; +// +// function helloImpl () {} +// +// function whatever(x: Foo = { [|hello|]() {/**1*/} }) { +// x.hello() +// } +// +// class Bar { +// x: Foo = { [|hello|]() {} } +// +// constructor(public f: Foo = { [|hello|]() {/**3*/} } ) {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff new file mode 100644 index 0000000000..316e60a704 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationInterfaceMethod_00.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_00.baseline.jsonc +@@= skipped -18, +18 lines =@@ + // constructor(public f: Foo = { [|hello|]() {/**3*/} } ) {} + // } + ++ ++ + // === goToImplementation === + // === /goToImplementationInterfaceMethod_00.ts === + // interface Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc new file mode 100644 index 0000000000..df5cc51199 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc @@ -0,0 +1,31 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_01.ts === +// --- (line: 3) skipped --- +// } +// +// class Bar implements Foo { +// [|hello|]() {} +// public sure() {} +// } +// +// function whatever(a: Foo) { +// a.he/*GOTO IMPL*/llo(); +// } +// +// whatever(new Bar()); + + + +// === goToImplementation === +// === /goToImplementationInterfaceMethod_01.ts === +// interface Foo { +// hel/*GOTO IMPL*/lo(): void; +// okay?: number; +// } +// +// class Bar implements Foo { +// [|hello|]() {} +// public sure() {} +// } +// +// // --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff new file mode 100644 index 0000000000..b4c6c1c7b9 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff @@ -0,0 +1,17 @@ +--- old.goToImplementationInterfaceMethod_01.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_01.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // + // whatever(new Bar()); + ++ ++ + // === goToImplementation === + // === /goToImplementationInterfaceMethod_01.ts === + // interface Foo { +@@= skipped -12, +14 lines =@@ + // public sure() {} + // } + // +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc new file mode 100644 index 0000000000..55f313a23f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc @@ -0,0 +1,32 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_02.ts === +// --- (line: 6) skipped --- +// } +// +// class Bar extends AbstractBar { +// [|hello|]() {} +// } +// +// function whatever(a: AbstractBar) { +// a.he/*GOTO IMPL*/llo(); +// } + + + +// === goToImplementation === +// === /goToImplementationInterfaceMethod_02.ts === +// interface Foo { +// he/*GOTO IMPL*/llo(): void +// } +// +// abstract class AbstractBar implements Foo { +// abstract hello(): void; +// } +// +// class Bar extends AbstractBar { +// [|hello|]() {} +// } +// +// function whatever(a: AbstractBar) { +// a.hello(); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff new file mode 100644 index 0000000000..e040a4265e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationInterfaceMethod_02.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_02.baseline.jsonc +@@= skipped -10, +10 lines =@@ + // a.he/*GOTO IMPL*/llo(); + // } + ++ ++ + // === goToImplementation === + // === /goToImplementationInterfaceMethod_02.ts === + // interface Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc new file mode 100644 index 0000000000..06b1eedf54 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc @@ -0,0 +1,19 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_03.ts === +// interface Foo { +// hello (): void; +// } +// +// class Bar extends SuperBar { +// [|hello|]() {} +// } +// +// class SuperBar implements Foo { +// // --- (line: 10) skipped --- + +// --- (line: 13) skipped --- +// hello() {} // should not show up +// } +// +// new Bar().hel/*GOTO IMPL*/lo(); +// new Bar()["hello"](); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff new file mode 100644 index 0000000000..bac7e01f2e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationInterfaceMethod_03.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_03.baseline.jsonc +@@= skipped -8, +8 lines =@@ + // } + // + // class SuperBar implements Foo { +-// --- (line: 10) skipped --- ++// // --- (line: 10) skipped --- + + // --- (line: 13) skipped --- + // hello() {} // should not show up \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc new file mode 100644 index 0000000000..3c49763b65 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc @@ -0,0 +1,21 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_04.ts === +// interface Foo { +// hello (): void; +// } +// +// class Bar extends SuperBar { +// [|hello|]() {} +// } +// +// class SuperBar implements Foo { +// [|hello|]() {} +// } +// +// class OtherBar implements Foo { +// hello() {} // should not show up +// } +// +// function (x: SuperBar) { +// x.he/*GOTO IMPL*/llo() +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff new file mode 100644 index 0000000000..9d8c01fbf8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationInterfaceMethod_04.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_04.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc new file mode 100644 index 0000000000..0372ac41ca --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc @@ -0,0 +1,31 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_05.ts === +// interface Foo { +// hello (): void; +// } +// +// class SuperBar implements Foo { +// [|hello|]() {} +// } +// +// class Bar extends SuperBar { +// hello2() {} +// } +// +// class OtherBar extends SuperBar { +// [|hello|]() {} +// hello2() {} +// hello3() {} +// } +// // --- (line: 18) skipped --- + +// --- (line: 22) skipped --- +// } +// +// class NotBar extends SuperBar { +// [|hello|]() {} // Should not be returned because it is not structurally equivalent to Bar +// } +// +// function whatever(x: Bar) { +// x.he/*GOTO IMPL*/llo() +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff new file mode 100644 index 0000000000..6febaa79b6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff @@ -0,0 +1,26 @@ +--- old.goToImplementationInterfaceMethod_05.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_05.baseline.jsonc +@@= skipped -8, +8 lines =@@ + // } + // + // class Bar extends SuperBar { +-// --- (line: 10) skipped --- ++// hello2() {} ++// } ++// ++// class OtherBar extends SuperBar { ++// [|hello|]() {} ++// hello2() {} ++// hello3() {} ++// } ++// // --- (line: 18) skipped --- + +-// --- (line: 26) skipped --- ++// --- (line: 22) skipped --- ++// } ++// ++// class NotBar extends SuperBar { ++// [|hello|]() {} // Should not be returned because it is not structurally equivalent to Bar + // } + // + // function whatever(x: Bar) { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc new file mode 100644 index 0000000000..e9ea996134 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc @@ -0,0 +1,39 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_06.ts === +// --- (line: 6) skipped --- +// } +// +// class Bar implements Foo { +// [|hello|]() {} +// someOtherFunction() {} +// } +// +// function createFoo(): Foo { +// return { +// [|hello|]() {}, +// someOtherFunction() {} +// }; +// } +// +// var y: Foo = { +// [|hello|]() {}, +// someOtherFunction() {} +// }; +// +// class FooLike implements SuperFoo { +// [|hello|]() {} +// someOtherFunction() {} +// } +// +// class NotRelatedToFoo { +// hello() {} // This case is equivalent to the last case, but is not returned because it does not share a common ancestor with Foo +// someOtherFunction() {} +// } +// +// class NotFoo implements SuperFoo { +// [|hello|]() {} // We only want implementations of Foo, even though the function is declared in SuperFoo +// } +// +// function (x: Foo) { +// x.he/*GOTO IMPL*/llo() +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff new file mode 100644 index 0000000000..48305c1233 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff @@ -0,0 +1,24 @@ +--- old.goToImplementationInterfaceMethod_06.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_06.baseline.jsonc +@@= skipped -19, +19 lines =@@ + // someOtherFunction() {} + // }; + // +-// --- (line: 26) skipped --- +- +-// --- (line: 37) skipped --- ++// class FooLike implements SuperFoo { ++// [|hello|]() {} ++// someOtherFunction() {} ++// } ++// ++// class NotRelatedToFoo { ++// hello() {} // This case is equivalent to the last case, but is not returned because it does not share a common ancestor with Foo ++// someOtherFunction() {} ++// } ++// ++// class NotFoo implements SuperFoo { ++// [|hello|]() {} // We only want implementations of Foo, even though the function is declared in SuperFoo + // } + // + // function (x: Foo) { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc new file mode 100644 index 0000000000..68ba2c42fb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc @@ -0,0 +1,17 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_08.ts === +// interface Foo { +// hello (): void; +// } +// +// class SuperBar implements Foo { +// [|hello|]() {} +// } +// +// class Bar extends SuperBar { +// whatever() { this.he/*GOTO IMPL*/llo(); } +// } +// +// class SubBar extends Bar { +// [|hello|]() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff new file mode 100644 index 0000000000..0736c3c8bc --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationInterfaceMethod_08.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_08.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc new file mode 100644 index 0000000000..7fff307c0d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc @@ -0,0 +1,55 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_09.ts === +// interface Foo { +// hello (): void; +// } +// +// class SubBar extends Bar { +// [|hello|]() {} +// } +// +// class Bar extends SuperBar { +// [|hello|]() {} +// +// whatever() { +// super.he/*GOTO IMPL*/llo(); +// super["hello"](); +// } +// } +// +// class SuperBar extends MegaBar { +// [|hello|]() {} +// } +// +// class MegaBar implements Foo { +// hello() {} +// } + + + +// === goToImplementation === +// === /goToImplementationInterfaceMethod_09.ts === +// interface Foo { +// hello (): void; +// } +// +// class SubBar extends Bar { +// [|hello|]() {} +// } +// +// class Bar extends SuperBar { +// [|hello|]() {} +// +// whatever() { +// super.hello(); +// super["hel/*GOTO IMPL*/lo"](); +// } +// } +// +// class SuperBar extends MegaBar { +// [|hello|]() {} +// } +// +// class MegaBar implements Foo { +// hello() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff new file mode 100644 index 0000000000..d3cf48246a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff @@ -0,0 +1,42 @@ +--- old.goToImplementationInterfaceMethod_09.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_09.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToImplementation === + // === /goToImplementationInterfaceMethod_09.ts === +-// --- (line: 9) skipped --- +-// hello() {} ++// interface Foo { ++// hello (): void; ++// } ++// ++// class SubBar extends Bar { ++// [|hello|]() {} ++// } ++// ++// class Bar extends SuperBar { ++// [|hello|]() {} + // + // whatever() { + // super.he/*GOTO IMPL*/llo(); +@@= skipped -16, +24 lines =@@ + // hello() {} + // } + ++ ++ + // === goToImplementation === + // === /goToImplementationInterfaceMethod_09.ts === +-// --- (line: 10) skipped --- ++// interface Foo { ++// hello (): void; ++// } ++// ++// class SubBar extends Bar { ++// [|hello|]() {} ++// } ++// ++// class Bar extends SuperBar { ++// [|hello|]() {} + // + // whatever() { + // super.hello(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc new file mode 100644 index 0000000000..54150affbc --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc @@ -0,0 +1,67 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_10.ts === +// --- (line: 11) skipped --- +// } +// +// class FooImpl implements Foo { +// [|hello|]() {/**FooImpl*/} +// aloha() {} +// } +// +// class BaseFooImpl implements BaseFoo { +// hello() {/**BaseFooImpl*/} // Should not show up +// } +// +// class BarImpl implements Bar { +// [|hello|]() {/**BarImpl*/} +// goodbye() {} +// } +// +// class FooAndBarImpl implements Foo, Bar { +// [|hello|]() {/**FooAndBarImpl*/} +// aloha() {} +// goodbye() {} +// } +// +// function someFunction(x: Foo | Bar) { +// x.he/*GOTO IMPL*/llo(); +// } +// +// function anotherFunction(x: Foo & Bar) { +// x.hello(); +// } + + + +// === goToImplementation === +// === /goToImplementationInterfaceMethod_10.ts === +// --- (line: 11) skipped --- +// } +// +// class FooImpl implements Foo { +// [|hello|]() {/**FooImpl*/} +// aloha() {} +// } +// +// class BaseFooImpl implements BaseFoo { +// hello() {/**BaseFooImpl*/} // Should not show up +// } +// +// class BarImpl implements Bar { +// [|hello|]() {/**BarImpl*/} +// goodbye() {} +// } +// +// class FooAndBarImpl implements Foo, Bar { +// [|hello|]() {/**FooAndBarImpl*/} +// aloha() {} +// goodbye() {} +// } +// +// function someFunction(x: Foo | Bar) { +// x.hello(); +// } +// +// function anotherFunction(x: Foo & Bar) { +// x.he/*GOTO IMPL*/llo(); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff new file mode 100644 index 0000000000..a142635742 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationInterfaceMethod_10.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_10.baseline.jsonc +@@= skipped -30, +30 lines =@@ + // x.hello(); + // } + ++ ++ + // === goToImplementation === + // === /goToImplementationInterfaceMethod_10.ts === + // --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc new file mode 100644 index 0000000000..83fb7cbf2f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc @@ -0,0 +1,8 @@ +// === goToImplementation === +// === /goToImplementationInterfaceMethod_11.ts === +// interface Foo { +// hel/*GOTO IMPL*/lo(): void; +// } +// +// var x = { [|hello|]: () => {} }; +// var y = (((({ [|hello|]: () => {} })))); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff new file mode 100644 index 0000000000..59dc35af22 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationInterfaceMethod_11.baseline.jsonc ++++ new.goToImplementationInterfaceMethod_11.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc new file mode 100644 index 0000000000..aee255e673 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc @@ -0,0 +1,18 @@ +// === goToImplementation === +// === /goToImplementationInterfaceProperty_00.ts === +// interface Foo { +// hello: number +// } +// +// var bar: Foo = { [|hello|]: 5 }; +// +// +// function whatever(x: Foo = { [|hello|]: 5 * 9 }) { +// x.he/*GOTO IMPL*/llo +// } +// +// class Bar { +// x: Foo = { [|hello|]: 6 } +// +// constructor(public f: Foo = { [|hello|]: 7 } ) {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff new file mode 100644 index 0000000000..d84424e4d5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationInterfaceProperty_00.baseline.jsonc ++++ new.goToImplementationInterfaceProperty_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc new file mode 100644 index 0000000000..b6ba56d904 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc @@ -0,0 +1,11 @@ +// === goToImplementation === +// === /goToImplementationInterfaceProperty_01.ts === +// interface Foo { hello: number } +// +// class Bar implements Foo { +// [|hello|] = 5 * 9; +// } +// +// function whatever(foo: Foo) { +// foo.he/*GOTO IMPL*/llo; +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff new file mode 100644 index 0000000000..1d32bda5bf --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationInterfaceProperty_01.baseline.jsonc ++++ new.goToImplementationInterfaceProperty_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc new file mode 100644 index 0000000000..8a2b891041 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc @@ -0,0 +1,11 @@ +// === goToImplementation === +// === /goToImplementationInterface_00.ts === +// interface Fo/*GOTO IMPL*/o { +// hello: () => void +// } +// +// interface [|Baz|] extends Foo {} +// +// var bar: Foo = { hello: helloImpl /**0*/ }; +// var baz: Foo[] = [{ hello: helloImpl /**4*/ }]; +// // --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff new file mode 100644 index 0000000000..bcef031a38 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff @@ -0,0 +1,22 @@ +--- old.goToImplementationInterface_00.baseline.jsonc ++++ new.goToImplementationInterface_00.baseline.jsonc +@@= skipped -5, +5 lines =@@ + // + // interface [|Baz|] extends Foo {} + // +-// var bar: Foo = [|{ hello: helloImpl /**0*/ }|]; +-// var baz: Foo[] = [|[{ hello: helloImpl /**4*/ }]|]; +-// +-// function helloImpl () {} +-// +-// function whatever(x: Foo = [|{ hello() {/**1*/} }|] ) { +-// } +-// +-// class Bar { +-// x: Foo = [|{ hello() {} }|] +-// +-// constructor(public f: Foo = [|{ hello() {/**3*/} }|] ) {} +-// } ++// var bar: Foo = { hello: helloImpl /**0*/ }; ++// var baz: Foo[] = [{ hello: helloImpl /**4*/ }]; ++// // --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc new file mode 100644 index 0000000000..9cec971fe2 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc @@ -0,0 +1,20 @@ +// === goToImplementation === +// === /goToImplementationInterface_01.ts === +// interface Fo/*GOTO IMPL*/o { hello(): void } +// +// class [|SuperBar|] implements Foo { +// hello () {} +// } +// +// abstract class [|AbstractBar|] implements Foo { +// abstract hello (): void; +// } +// +// class [|Bar|] extends SuperBar { +// } +// +// class [|NotAbstractBar|] extends AbstractBar { +// hello () {} +// } +// +// // --- (line: 18) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff new file mode 100644 index 0000000000..873d9b32d5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToImplementationInterface_01.baseline.jsonc ++++ new.goToImplementationInterface_01.baseline.jsonc +@@= skipped -16, +16 lines =@@ + // hello () {} + // } + // +-// var x = new SuperBar(); +-// var y: SuperBar = new SuperBar(); +-// var z: AbstractBar = new NotAbstractBar(); ++// // --- (line: 18) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc new file mode 100644 index 0000000000..8ce731f3d2 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /goToImplementationInterface_02.ts === +// interface Fo/*GOTO IMPL*/o { hello: () => void } +// +// let x: number = 9; +// +// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff new file mode 100644 index 0000000000..7200ef7c34 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff @@ -0,0 +1,23 @@ +--- old.goToImplementationInterface_02.baseline.jsonc ++++ new.goToImplementationInterface_02.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // + // let x: number = 9; + // +-// function createFoo(): Foo { +-// if (x === 2) { +-// return [|{ +-// hello() {} +-// }|]; +-// } +-// return [|{ +-// hello() {} +-// }|]; +-// } +-// +-// let createFoo2 = (): Foo => [|({hello() {}})|]; +-// +-// function createFooLike() { +-// return { +-// --- (line: 20) skipped --- ++// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc new file mode 100644 index 0000000000..c9e5969066 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc @@ -0,0 +1,5 @@ +// === goToImplementation === +// === /goToImplementationInterface_03.ts === +// interface Fo/*GOTO IMPL*/o { hello: () => void } +// +// var x = { hello: () => {} }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc.diff new file mode 100644 index 0000000000..6bb2ff7287 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_03.baseline.jsonc.diff @@ -0,0 +1,8 @@ +--- old.goToImplementationInterface_03.baseline.jsonc ++++ new.goToImplementationInterface_03.baseline.jsonc +@@= skipped -1, +1 lines =@@ + // === /goToImplementationInterface_03.ts === + // interface Fo/*GOTO IMPL*/o { hello: () => void } + // +-// var x = [|{ hello: () => {} }|]; ++// var x = { hello: () => {} }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc new file mode 100644 index 0000000000..a5975ebf89 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /goToImplementationInterface_04.ts === +// interface Fo/*GOTO IMPL*/o { +// (a: number): void +// } +// +// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff new file mode 100644 index 0000000000..374357210f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff @@ -0,0 +1,17 @@ +--- old.goToImplementationInterface_04.baseline.jsonc ++++ new.goToImplementationInterface_04.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // (a: number): void + // } + // +-// var bar: Foo = [|(a) => {/**0*/}|]; +-// +-// function whatever(x: Foo = [|(a) => {/**1*/}|] ) { +-// } +-// +-// class Bar { +-// x: Foo = [|(a) => {/**2*/}|] +-// +-// constructor(public f: Foo = [|function(a) {}|] ) {} +-// } ++// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc new file mode 100644 index 0000000000..7fe292c1d8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc @@ -0,0 +1,8 @@ +// === goToImplementation === +// === /goToImplementationInterface_05.ts === +// interface Fo/*GOTO IMPL*/o { +// (a: number): void +// } +// +// let bar2 = function(a) {}; +// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc.diff new file mode 100644 index 0000000000..ce68361b83 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_05.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToImplementationInterface_05.baseline.jsonc ++++ new.goToImplementationInterface_05.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // (a: number): void + // } + // +-// let bar2 = [|function(a) {}|]; ++// let bar2 = function(a) {}; + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc new file mode 100644 index 0000000000..4fb84f5039 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /goToImplementationInterface_06.ts === +// interface Fo/*GOTO IMPL*/o { +// new (a: number): SomeOtherType; +// } +// +// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff new file mode 100644 index 0000000000..f93bac5c90 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationInterface_06.baseline.jsonc ++++ new.goToImplementationInterface_06.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // new (a: number): SomeOtherType; + // } + // +-// interface SomeOtherType {} +-// +-// let x: Foo = [|class { constructor (a: number) {} }|]; +-// let y = [|class { constructor (a: number) {} }|]; ++// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc new file mode 100644 index 0000000000..2b2a5c0bc5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc @@ -0,0 +1,25 @@ +// === goToImplementation === +// === /goToImplementationInterface_07.ts === +// interface Fo/*GOTO IMPL*/o { +// hello (): void; +// } +// +// // --- (line: 5) skipped --- + +// --- (line: 8) skipped --- +// let x1: Foo = { hello () { /**typeReference*/ } }; +// let x2: () => Foo = (() => { hello () { /**functionType*/} }); +// let x3: Foo | Bar = { hello () { /**unionType*/} }; +// let x4: Foo & (Foo & Bar) = [|{ hello () { /**intersectionType*/} }|]; +// let x5: [Foo] = [{ hello () { /**tupleType*/} }]; +// let x6: (Foo) = { hello () { /**parenthesizedType*/} }; +// let x7: (new() => Foo) = class { hello () { /**constructorType*/} }; +// let x8: Foo[] = [{ hello () { /**arrayType*/} }]; +// let x9: { y: Foo } = { y: { hello () { /**typeLiteral*/} } }; +// let x10 = [|class implements Foo { hello() {} }|] +// let x11 = class [|C|] implements Foo { hello() {} } +// +// // Should not do anything for type predicates +// function isFoo(a: any): a is Foo { +// return true; +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff new file mode 100644 index 0000000000..543dc36acb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff @@ -0,0 +1,33 @@ +--- old.goToImplementationInterface_07.baseline.jsonc ++++ new.goToImplementationInterface_07.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // hello (): void; + // } + // +-// interface Bar { +-// hello (): void; +-// } +-// +-// let x1: Foo = [|{ hello () { /**typeReference*/ } }|]; +-// let x2: () => Foo = [|(() => { hello () { /**functionType*/} })|]; +-// let x3: Foo | Bar = [|{ hello () { /**unionType*/} }|]; ++// // --- (line: 5) skipped --- ++ ++// --- (line: 8) skipped --- ++// let x1: Foo = { hello () { /**typeReference*/ } }; ++// let x2: () => Foo = (() => { hello () { /**functionType*/} }); ++// let x3: Foo | Bar = { hello () { /**unionType*/} }; + // let x4: Foo & (Foo & Bar) = [|{ hello () { /**intersectionType*/} }|]; +-// let x5: [Foo] = [|[{ hello () { /**tupleType*/} }]|]; +-// let x6: (Foo) = [|{ hello () { /**parenthesizedType*/} }|]; +-// let x7: (new() => Foo) = [|class { hello () { /**constructorType*/} }|]; +-// let x8: Foo[] = [|[{ hello () { /**arrayType*/} }]|]; +-// let x9: { y: Foo } = [|{ y: { hello () { /**typeLiteral*/} } }|]; ++// let x5: [Foo] = [{ hello () { /**tupleType*/} }]; ++// let x6: (Foo) = { hello () { /**parenthesizedType*/} }; ++// let x7: (new() => Foo) = class { hello () { /**constructorType*/} }; ++// let x8: Foo[] = [{ hello () { /**arrayType*/} }]; ++// let x9: { y: Foo } = { y: { hello () { /**typeLiteral*/} } }; + // let x10 = [|class implements Foo { hello() {} }|] + // let x11 = class [|C|] implements Foo { hello() {} } + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc new file mode 100644 index 0000000000..3aee1fbc76 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc @@ -0,0 +1,12 @@ +// === goToImplementation === +// === /goToImplementationInterface_08.ts === +// --- (line: 6) skipped --- +// interface C extends B, A {} +// +// class X implements B { +// [|hello|]() {} +// } +// +// function someFunction(d : A) { +// d.he/*GOTO IMPL*/llo(); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff new file mode 100644 index 0000000000..9f1afb0965 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationInterface_08.baseline.jsonc ++++ new.goToImplementationInterface_08.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc new file mode 100644 index 0000000000..86b3ad92be --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /ref.ts === +// import { Interface } from "./def"; +// const c: I/*GOTO IMPL*/nterface = { P: 2 }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc.diff new file mode 100644 index 0000000000..e7dd7931be --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_09.baseline.jsonc.diff @@ -0,0 +1,8 @@ +--- old.goToImplementationInterface_09.baseline.jsonc ++++ new.goToImplementationInterface_09.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToImplementation === + // === /ref.ts === + // import { Interface } from "./def"; +-// const c: I/*GOTO IMPL*/nterface = [|{ P: 2 }|]; ++// const c: I/*GOTO IMPL*/nterface = { P: 2 }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc new file mode 100644 index 0000000000..f4361a3a48 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc @@ -0,0 +1,13 @@ +// === goToImplementation === +// === /a.ts === +// interface /*GOTO IMPL*/A { +// foo: boolean; +// } +// interface [|B|] extends A { +// bar: boolean; +// } +// export class [|C|] implements B { +// foo = true; +// bar = true; +// } +// export class [|D|] extends C { } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff new file mode 100644 index 0000000000..5ff7464d63 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationInterface_10.baseline.jsonc ++++ new.goToImplementationInterface_10.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInvalid.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInvalid.baseline.jsonc new file mode 100644 index 0000000000..fbed01db66 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInvalid.baseline.jsonc @@ -0,0 +1,21 @@ +// === goToImplementation === +// === /goToImplementationInvalid.ts === +// var x1 = 50/*GOTO IMPL*/0; +// var x2 = "hello"; +// + + + +// === goToImplementation === +// === /goToImplementationInvalid.ts === +// var x1 = 500; +// var x2 = "hel/*GOTO IMPL*/lo"; +// + + + +// === goToImplementation === +// === /goToImplementationInvalid.ts === +// var x1 = 500; +// var x2 = "hello"; +// /*GOTO IMPL*/ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc new file mode 100644 index 0000000000..9cbc1f6e51 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /goToImplementationLocal_00.ts === +// he/*GOTO IMPL*/llo(); +// function [|hello|]() {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff new file mode 100644 index 0000000000..577c67269e --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_00.baseline.jsonc ++++ new.goToImplementationLocal_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc new file mode 100644 index 0000000000..19cd1cf5e8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /goToImplementationLocal_01.ts === +// const [|hello|] = function() {}; +// he/*GOTO IMPL*/llo(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff new file mode 100644 index 0000000000..3246188add --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_01.baseline.jsonc ++++ new.goToImplementationLocal_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc new file mode 100644 index 0000000000..4cde3736a8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc @@ -0,0 +1,6 @@ +// === goToImplementation === +// === /goToImplementationLocal_02.ts === +// const x = { [|hello|]: () => {} }; +// +// x.he/*GOTO IMPL*/llo(); +// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff new file mode 100644 index 0000000000..1794e6b646 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_02.baseline.jsonc ++++ new.goToImplementationLocal_02.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc new file mode 100644 index 0000000000..4bff0bddbb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc @@ -0,0 +1,8 @@ +// === goToImplementation === +// === /goToImplementationLocal_03.ts === +// let [|he/*GOTO IMPL*/llo|] = {}; +// +// x.hello(); +// +// hello = {}; +// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff new file mode 100644 index 0000000000..bb76e85c7f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_03.baseline.jsonc ++++ new.goToImplementationLocal_03.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc new file mode 100644 index 0000000000..82c8111e01 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc @@ -0,0 +1,6 @@ +// === goToImplementation === +// === /goToImplementationLocal_04.ts === +// function [|he/*GOTO IMPL*/llo|]() {} +// +// hello(); +// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff new file mode 100644 index 0000000000..76f304e816 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_04.baseline.jsonc ++++ new.goToImplementationLocal_04.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc new file mode 100644 index 0000000000..7963b26309 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc @@ -0,0 +1,8 @@ +// === goToImplementation === +// === /goToImplementationLocal_05.ts === +// class Bar { +// public hello() {} +// } +// +// var [|someVar|] = new Bar(); +// someVa/*GOTO IMPL*/r.hello(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff new file mode 100644 index 0000000000..46d1466859 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_05.baseline.jsonc ++++ new.goToImplementationLocal_05.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc new file mode 100644 index 0000000000..90b6857636 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /goToImplementationLocal_06.ts === +// declare var [|someVar|]: string; +// someVa/*GOTO IMPL*/r \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff new file mode 100644 index 0000000000..8857f75d49 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_06.baseline.jsonc ++++ new.goToImplementationLocal_06.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc new file mode 100644 index 0000000000..a37609c4f0 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /goToImplementationLocal_07.ts === +// declare function [|someFunction|](): () => void; +// someFun/*GOTO IMPL*/ction(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff new file mode 100644 index 0000000000..5d3a95fabe --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_07.baseline.jsonc ++++ new.goToImplementationLocal_07.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc new file mode 100644 index 0000000000..e70a13b9c7 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /goToImplementationLocal_08.ts === +// declare function [|someFunction|](): () => void; +// someFun/*GOTO IMPL*/ction(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff new file mode 100644 index 0000000000..96dceccb2c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationLocal_08.baseline.jsonc ++++ new.goToImplementationLocal_08.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc new file mode 100644 index 0000000000..a66baa42cb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc @@ -0,0 +1,27 @@ +// === goToImplementation === +// === /goToImplementationNamespace_00.ts === +// namespace [|Foo|] { +// export function hello() {} +// } +// +// module Bar { +// export function sure() {} +// } +// +// let x = Fo/*GOTO IMPL*/o; +// let y = Bar; + + + +// === goToImplementation === +// === /goToImplementationNamespace_00.ts === +// namespace Foo { +// export function hello() {} +// } +// +// module [|Bar|] { +// export function sure() {} +// } +// +// let x = Foo; +// let y = Ba/*GOTO IMPL*/r; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff new file mode 100644 index 0000000000..940caf4cac --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationNamespace_00.baseline.jsonc ++++ new.goToImplementationNamespace_00.baseline.jsonc +@@= skipped -10, +10 lines =@@ + // let x = Fo/*GOTO IMPL*/o; + // let y = Bar; + ++ ++ + // === goToImplementation === + // === /goToImplementationNamespace_00.ts === + // namespace Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc new file mode 100644 index 0000000000..bb3b20529d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /goToImplementationNamespace_01.ts === +// namespace Foo { +// export function [|hello|]() {} +// } +// +// Foo.hell/*GOTO IMPL*/o(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff new file mode 100644 index 0000000000..5307a163ba --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationNamespace_01.baseline.jsonc ++++ new.goToImplementationNamespace_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc new file mode 100644 index 0000000000..30ad833dd8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /goToImplementationNamespace_02.ts === +// module Foo { +// export function [|hello|]() {} +// } +// +// Foo.hell/*GOTO IMPL*/o(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff new file mode 100644 index 0000000000..628c4678c4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationNamespace_02.baseline.jsonc ++++ new.goToImplementationNamespace_02.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc new file mode 100644 index 0000000000..db144921f9 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc @@ -0,0 +1,23 @@ +// === goToImplementation === +// === /goToImplementationNamespace_03.ts === +// namespace Foo { +// export interface Bar { +// hello(): void; +// } +// +// class [|BarImpl|] implements Bar { +// hello() {} +// } +// } +// +// class [|Baz|] implements Foo.Bar { +// hello() {} +// } +// +// var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; +// +// var someVar2 = { hello: () => {/**2*/} }; +// +// function whatever(x: Foo.Ba/*GOTO IMPL*/r) { +// +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff new file mode 100644 index 0000000000..6b1e90b143 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff @@ -0,0 +1,14 @@ +--- old.goToImplementationNamespace_03.baseline.jsonc ++++ new.goToImplementationNamespace_03.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // hello() {} + // } + // +-// var someVar1 : Foo.Bar = [|{ hello: () => {/**1*/} }|]; ++// var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; + // +-// var someVar2 = [|{ hello: () => {/**2*/} }|]; ++// var someVar2 = { hello: () => {/**2*/} }; + // + // function whatever(x: Foo.Ba/*GOTO IMPL*/r) { + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc new file mode 100644 index 0000000000..1863515b61 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc @@ -0,0 +1,23 @@ +// === goToImplementation === +// === /goToImplementationNamespace_04.ts === +// module Foo { +// export interface Bar { +// hello(): void; +// } +// +// class [|BarImpl|] implements Bar { +// hello() {} +// } +// } +// +// class [|Baz|] implements Foo.Bar { +// hello() {} +// } +// +// var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; +// +// var someVar2 = { hello: () => {/**2*/} }; +// +// function whatever(x: Foo.Ba/*GOTO IMPL*/r) { +// +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff new file mode 100644 index 0000000000..c92414e7d3 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff @@ -0,0 +1,14 @@ +--- old.goToImplementationNamespace_04.baseline.jsonc ++++ new.goToImplementationNamespace_04.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // hello() {} + // } + // +-// var someVar1 : Foo.Bar = [|{ hello: () => {/**1*/} }|]; ++// var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; + // +-// var someVar2 = [|{ hello: () => {/**2*/} }|]; ++// var someVar2 = { hello: () => {/**2*/} }; + // + // function whatever(x: Foo.Ba/*GOTO IMPL*/r) { + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc new file mode 100644 index 0000000000..d9cba3c872 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc @@ -0,0 +1,52 @@ +// === goToImplementation === +// === /goToImplementationNamespace_05.ts === +// namespace [|Foo|].Baz { +// export function hello() {} +// } +// +// module Bar.Baz { +// export function sure() {} +// } +// +// let x = Fo/*GOTO IMPL*/o; +// let y = Bar; +// let x1 = Foo.Baz; +// let y1 = Bar.Baz; + + + +// === goToImplementation === +// === /goToImplementationNamespace_05.ts === +// namespace Foo.Baz { +// export function hello() {} +// } +// +// module [|Bar|].Baz { +// export function sure() {} +// } +// +// let x = Foo; +// let y = Ba/*GOTO IMPL*/r; +// let x1 = Foo.Baz; +// let y1 = Bar.Baz; + + + +// === goToImplementation === +// === /goToImplementationNamespace_05.ts === +// --- (line: 7) skipped --- +// +// let x = Foo; +// let y = Bar; +// let x1 = Foo.B/*GOTO IMPL*/az; +// let y1 = Bar.Baz; + + + +// === goToImplementation === +// === /goToImplementationNamespace_05.ts === +// --- (line: 8) skipped --- +// let x = Foo; +// let y = Bar; +// let x1 = Foo.Baz; +// let y1 = Bar.B/*GOTO IMPL*/az; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff new file mode 100644 index 0000000000..82d3afc2ff --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff @@ -0,0 +1,49 @@ +--- old.goToImplementationNamespace_05.baseline.jsonc ++++ new.goToImplementationNamespace_05.baseline.jsonc +@@= skipped -12, +12 lines =@@ + // let x1 = Foo.Baz; + // let y1 = Bar.Baz; + ++ ++ + // === goToImplementation === + // === /goToImplementationNamespace_05.ts === + // namespace Foo.Baz { +@@= skipped -15, +17 lines =@@ + // let x1 = Foo.Baz; + // let y1 = Bar.Baz; + ++ ++ + // === goToImplementation === + // === /goToImplementationNamespace_05.ts === +-// namespace Foo.[|Baz|] { +-// export function hello() {} +-// } +-// +-// module Bar.Baz { +-// export function sure() {} +-// } ++// --- (line: 7) skipped --- + // + // let x = Foo; + // let y = Bar; + // let x1 = Foo.B/*GOTO IMPL*/az; + // let y1 = Bar.Baz; + ++ ++ + // === goToImplementation === + // === /goToImplementationNamespace_05.ts === +-// namespace Foo.Baz { +-// export function hello() {} +-// } +-// +-// module Bar.[|Baz|] { +-// export function sure() {} +-// } +-// ++// --- (line: 8) skipped --- + // let x = Foo; + // let y = Bar; + // let x1 = Foo.Baz; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc new file mode 100644 index 0000000000..a507004759 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc @@ -0,0 +1,8 @@ +// === goToImplementation === +// === /goToImplementationNamespace_06.ts === +// namespace [|F/*GOTO IMPL*/oo|] { +// declare function hello(): void; +// } +// +// +// let x: typeof Foo = { hello() {} }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff new file mode 100644 index 0000000000..0eb07ca251 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff @@ -0,0 +1,8 @@ +--- old.goToImplementationNamespace_06.baseline.jsonc ++++ new.goToImplementationNamespace_06.baseline.jsonc +@@= skipped -4, +4 lines =@@ + // } + // + // +-// let x: typeof Foo = [|{ hello() {} }|]; ++// let x: typeof Foo = { hello() {} }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc new file mode 100644 index 0000000000..88a6a66e7f --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc @@ -0,0 +1,49 @@ +// === goToImplementation === +// === /goToImplementationShorthandPropertyAssignment_00.ts === +// --- (line: 9) skipped --- +// Foo: FooConstructor; +// } +// +// var x = class [|Foo|] { +// createBarInClassExpression(): Bar { +// return { +// Fo/*GOTO IMPL*/o +// }; +// } +// +// someFunction() {} +// } +// +// class [|Foo|] { +// +// } +// +// // --- (line: 27) skipped --- + + + +// === goToImplementation === +// === /goToImplementationShorthandPropertyAssignment_00.ts === +// --- (line: 9) skipped --- +// Foo: FooConstructor; +// } +// +// var x = class [|Foo|] { +// createBarInClassExpression(): Bar { +// return { +// Foo +// }; +// } +// +// someFunction() {} +// } +// +// class [|Foo|] { +// +// } +// +// function createBarUsingClassDeclaration(): Bar { +// return { +// Fo/*GOTO IMPL*/o +// }; +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff new file mode 100644 index 0000000000..9438a83feb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff @@ -0,0 +1,34 @@ +--- old.goToImplementationShorthandPropertyAssignment_00.baseline.jsonc ++++ new.goToImplementationShorthandPropertyAssignment_00.baseline.jsonc +@@= skipped -13, +13 lines =@@ + // someFunction() {} + // } + // +-// class Foo { +-// +-// --- (line: 25) skipped --- ++// class [|Foo|] { ++// ++// } ++// ++// // --- (line: 27) skipped --- ++ ++ + + // === goToImplementation === + // === /goToImplementationShorthandPropertyAssignment_00.ts === +-// --- (line: 19) skipped --- ++// --- (line: 9) skipped --- ++// Foo: FooConstructor; ++// } ++// ++// var x = class [|Foo|] { ++// createBarInClassExpression(): Bar { ++// return { ++// Foo ++// }; ++// } ++// + // someFunction() {} + // } + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc new file mode 100644 index 0000000000..192f1dbe39 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc @@ -0,0 +1,27 @@ +// === goToImplementation === +// === /goToImplementationShorthandPropertyAssignment_01.ts === +// --- (line: 10) skipped --- +// } +// +// // Class expression that gets used in a bar implementation +// var x = class [|Foo|] { +// createBarInClassExpression(): Bar { +// return { +// Foo +// // --- (line: 18) skipped --- + +// --- (line: 22) skipped --- +// +// // Class declaration that gets used in a bar implementation. This class has multiple definitions +// // (the class declaration and the interface above), but we only want the class returned +// class [|Foo|] { +// +// } +// +// // --- (line: 30) skipped --- + +// --- (line: 37) skipped --- +// someFunction() {} +// }; +// +// createBarUsingClassDeclaration().Fo/*GOTO IMPL*/o; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff new file mode 100644 index 0000000000..0da8ed4fcf --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff @@ -0,0 +1,28 @@ +--- old.goToImplementationShorthandPropertyAssignment_01.baseline.jsonc ++++ new.goToImplementationShorthandPropertyAssignment_01.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // createBarInClassExpression(): Bar { + // return { + // Foo +-// }; +-// } +-// +-// someFunction() {} +-// }; ++// // --- (line: 18) skipped --- ++ ++// --- (line: 22) skipped --- + // + // // Class declaration that gets used in a bar implementation. This class has multiple definitions + // // (the class declaration and the interface above), but we only want the class returned +@@= skipped -12, +10 lines =@@ + // + // } + // +-// function createBarUsingClassDeclaration(): Bar { +-// return { +-// --- (line: 32) skipped --- ++// // --- (line: 30) skipped --- + + // --- (line: 37) skipped --- + // someFunction() {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc new file mode 100644 index 0000000000..77882ec8a5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc @@ -0,0 +1,12 @@ +// === goToImplementation === +// === /goToImplementationShorthandPropertyAssignment_02.ts === +// --- (line: 6) skipped --- +// hello +// }; +// +// function [|hello|]() {} +// } +// +// function whatever(x: Foo) { +// x.h/*GOTO IMPL*/ello(); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff new file mode 100644 index 0000000000..4abbbe3baf --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationShorthandPropertyAssignment_02.baseline.jsonc ++++ new.goToImplementationShorthandPropertyAssignment_02.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc new file mode 100644 index 0000000000..7d94d31ca4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc @@ -0,0 +1,11 @@ +// === goToImplementation === +// === /goToImplementationSuper_00.ts === +// class [|Foo|] { +// constructor() {} +// } +// +// class [|Bar|] extends Foo { +// constructor() { +// su/*GOTO IMPL*/per(); +// } +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff new file mode 100644 index 0000000000..53b0888f61 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationSuper_00.baseline.jsonc ++++ new.goToImplementationSuper_00.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // constructor() {} + // } + // +-// class Bar extends Foo { ++// class [|Bar|] extends Foo { + // constructor() { + // su/*GOTO IMPL*/per(); + // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc new file mode 100644 index 0000000000..70e54f4178 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc @@ -0,0 +1,11 @@ +// === goToImplementation === +// === /goToImplementationSuper_01.ts === +// class [|Foo|] { +// hello() {} +// } +// +// class [|Bar|] extends Foo { +// hello() { +// sup/*GOTO IMPL*/er.hello(); +// } +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff new file mode 100644 index 0000000000..ea60e09f88 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToImplementationSuper_01.baseline.jsonc ++++ new.goToImplementationSuper_01.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // hello() {} + // } + // +-// class Bar extends Foo { ++// class [|Bar|] extends Foo { + // hello() { + // sup/*GOTO IMPL*/er.hello(); + // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc new file mode 100644 index 0000000000..ee2e163c4c --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc @@ -0,0 +1,9 @@ +// === goToImplementation === +// === /goToImplementationThis_00.ts === +// class [|Bar|] extends Foo { +// hello() { +// thi/*GOTO IMPL*/s.whatever(); +// } +// +// whatever() {} +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff new file mode 100644 index 0000000000..045660e113 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationThis_00.baseline.jsonc ++++ new.goToImplementationThis_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc new file mode 100644 index 0000000000..b261b75f29 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /goToImplementationThis_01.ts === +// class [|Bar|] extends Foo { +// hello(): th/*GOTO IMPL*/is { +// return this; +// } +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff new file mode 100644 index 0000000000..6f1652d3a9 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementationThis_01.baseline.jsonc ++++ new.goToImplementationThis_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc new file mode 100644 index 0000000000..2cf8e91944 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /ref.ts === +// import { TypeAlias } from "./def"; +// const c: T/*GOTO IMPL*/ypeAlias = { P: 2 }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc.diff new file mode 100644 index 0000000000..4f15fa96cc --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationTypeAlias_00.baseline.jsonc.diff @@ -0,0 +1,8 @@ +--- old.goToImplementationTypeAlias_00.baseline.jsonc ++++ new.goToImplementationTypeAlias_00.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToImplementation === + // === /ref.ts === + // import { TypeAlias } from "./def"; +-// const c: T/*GOTO IMPL*/ypeAlias = [|{ P: 2 }|]; ++// const c: T/*GOTO IMPL*/ypeAlias = { P: 2 }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc new file mode 100644 index 0000000000..b2e3f3e351 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc @@ -0,0 +1,16 @@ +// === goToImplementation === +// === /home/src/workspaces/project/bar.ts === +// import {Foo} from './foo' +// +// class [|A|] implements Foo { +// func() {} +// } +// +// class [|B|] implements Foo { +// func() {} +// } + +// === /home/src/workspaces/project/foo.ts === +// export interface /*GOTO IMPL*/Foo { +// func(); +// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff new file mode 100644 index 0000000000..3d48b83c18 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToImplementation_inDifferentFiles.baseline.jsonc ++++ new.goToImplementation_inDifferentFiles.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc new file mode 100644 index 0000000000..6717105ad0 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc @@ -0,0 +1,7 @@ +// === goToImplementation === +// === /a.ts === +// interface /*GOTO IMPL*/I { +// foo: string; +// } +// +// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff new file mode 100644 index 0000000000..8fb3529aeb --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToImplementation_satisfies.baseline.jsonc ++++ new.goToImplementation_satisfies.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // foo: string; + // } + // +-// function f() { +-// const foo = [|{ foo: '' }|] satisfies I; +-// } ++// // --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc new file mode 100644 index 0000000000..e4ca4b5efd --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc @@ -0,0 +1,4 @@ +// === goToImplementation === +// === /implementation01.ts === +// interface Fo/*GOTO IMPL*/o {} +// class [|Bar|] implements Foo {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff new file mode 100644 index 0000000000..c4c827eb68 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.implementation01.baseline.jsonc ++++ new.implementation01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff new file mode 100644 index 0000000000..04b4e5c871 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToTypeDefinition.baseline.jsonc ++++ new.goToTypeDefinition.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition2.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff new file mode 100644 index 0000000000..a70f2d771a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff @@ -0,0 +1,13 @@ +--- old.goToTypeDefinition2.baseline.jsonc ++++ new.goToTypeDefinition2.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // p; + // } + // type propertyType = I1; +-// interface I2 { +-// property: propertyType; +-// } ++// // --- (line: 5) skipped --- + + // === /goToTypeDefinition2_Consumption.ts === + // var i2: I2; \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition3.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff new file mode 100644 index 0000000000..b9b12639d4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToTypeDefinition3.baseline.jsonc ++++ new.goToTypeDefinition3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition4.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff new file mode 100644 index 0000000000..237d4613c8 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff @@ -0,0 +1,8 @@ +--- old.goToTypeDefinition4.baseline.jsonc ++++ new.goToTypeDefinition4.baseline.jsonc +@@= skipped -1, +1 lines =@@ + // === /bar.ts === + // import { T } from "./foo"; + // let x: /*GOTO TYPE*/T; +- +- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition5.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition5.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition5.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff new file mode 100644 index 0000000000..65efa66ae4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToTypeDefinitionAliases.baseline.jsonc ++++ new.goToTypeDefinitionAliases.baseline.jsonc +@@= skipped -8, +8 lines =@@ + // import {/*GOTO TYPE*/v2 as v3} from "./goToTypeDefinitioAliases_module2"; + // v3; + ++ ++ + // === goToType === + // === /goToTypeDefinitioAliases_module1.ts === + // interface [|I|] { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff new file mode 100644 index 0000000000..0421c767ad --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToTypeDefinitionEnumMembers.baseline.jsonc ++++ new.goToTypeDefinitionEnumMembers.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff new file mode 100644 index 0000000000..b133354184 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToTypeDefinitionImportMeta.baseline.jsonc ++++ new.goToTypeDefinitionImportMeta.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff new file mode 100644 index 0000000000..824949b799 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff @@ -0,0 +1,430 @@ +--- old.goToTypeDefinitionModifiers.baseline.jsonc ++++ new.goToTypeDefinitionModifiers.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // + // private z: string; + // +-// private y: A; +-// +-// readonly x: string; +-// +-// async a() { } +-// +-// override b() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } ++// // --- (line: 5) skipped --- ++ ++ + + // === goToType === + // === /a.ts === +@@= skipped -19, +10 lines =@@ + // + // private z: string; + // +-// private y: A; +-// +-// readonly x: string; +-// +-// async a() { } +-// +-// override b() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } ++// // --- (line: 5) skipped --- ++ ++ + + // === goToType === + // === /a.ts === +@@= skipped -21, +12 lines =@@ + // + // private y: A; + // +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- + + + +@@= skipped -12, +12 lines =@@ + // + // private y: A; + // +-// --- (line: 7) skipped --- ++// // --- (line: 7) skipped --- + + + +@@= skipped -14, +14 lines =@@ + // + // readonly x: string; + // +-// async a() { } +-// +-// override b() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } ++// // --- (line: 9) skipped --- ++ ++ + + // === goToType === + // === /a.ts === +@@= skipped -19, +14 lines =@@ + // + // readonly x: string; + // +-// async a() { } +-// +-// override b() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } ++// // --- (line: 9) skipped --- ++ ++ + + // === goToType === + // === /a.ts === +@@= skipped -19, +14 lines =@@ + // + // async a() { } + // +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- + + + +@@= skipped -14, +14 lines =@@ + // + // async a() { } + // +-// --- (line: 11) skipped --- ++// // --- (line: 11) skipped --- + + + + // === goToType === +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- +- + // === /a.ts === + // --- (line: 5) skipped --- + // +@@= skipped -40, +14 lines =@@ + // + // override b() {} + // +-// --- (line: 13) skipped --- ++// // --- (line: 13) skipped --- ++ ++ + + // === goToType === +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- +- + // === /a.ts === + // --- (line: 5) skipped --- + // +@@= skipped -38, +14 lines =@@ + // + // override b() {} + // +-// --- (line: 13) skipped --- +- +-// === goToType === +-// === /a.ts === +-// --- (line: 7) skipped --- +-// +-// async a() { } +-// +-// /*GOTO TYPE*/override [|b|]() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } +- +-// === goToType === +-// === /a.ts === +-// --- (line: 7) skipped --- +-// +-// async a() { } +-// +-// override [|b|]/*GOTO TYPE*/() {} +-// +-// public async c() { } +-// } +-// +-// export function foo() { } +- +-// === goToType === +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- +- ++// // --- (line: 13) skipped --- ++ ++ ++ ++// === goToType === ++// === /a.ts === ++// --- (line: 7) skipped --- ++// ++// async a() { } ++// ++// /*GOTO TYPE*/override b() {} ++// ++// public async c() { } ++// } ++// ++// export function foo() { } ++ ++ ++ ++// === goToType === ++// === /a.ts === ++// --- (line: 7) skipped --- ++// ++// async a() { } ++// ++// override b/*GOTO TYPE*/() {} ++// ++// public async c() { } ++// } ++// ++// export function foo() { } ++ ++ ++ ++// === goToType === + // === /a.ts === + // --- (line: 9) skipped --- + // +@@= skipped -65, +45 lines =@@ + // + // export function foo() { } + ++ ++ + // === goToType === +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- +- + // === /a.ts === + // --- (line: 9) skipped --- + // +@@= skipped -37, +13 lines =@@ + // + // export function foo() { } + ++ ++ + // === goToType === +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- +- + // === /a.ts === + // --- (line: 9) skipped --- + // +@@= skipped -37, +13 lines =@@ + // + // export function foo() { } + ++ ++ + // === goToType === +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- +- + // === /a.ts === + // --- (line: 9) skipped --- + // +@@= skipped -37, +13 lines =@@ + // + // export function foo() { } + +-// === goToType === +-// === /a.ts === +-// --- (line: 12) skipped --- +-// public async c() { } +-// } +-// +-// exp/*GOTO TYPE*/ort function [|foo|]() { } +- +-// === goToType === +-// === /a.ts === +-// --- (line: 12) skipped --- +-// public async c() { } +-// } +-// +-// export function [|foo|]/*GOTO TYPE*/() { } ++ ++ ++// === goToType === ++// === /a.ts === ++// --- (line: 12) skipped --- ++// public async c() { } ++// } ++// ++// exp/*GOTO TYPE*/ort function foo() { } ++ ++ ++ ++// === goToType === ++// === /a.ts === ++// --- (line: 12) skipped --- ++// public async c() { } ++// } ++// ++// export function foo/*GOTO TYPE*/() { } \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff new file mode 100644 index 0000000000..9466a357ae --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToTypeDefinitionModule.baseline.jsonc ++++ new.goToTypeDefinitionModule.baseline.jsonc +@@= skipped -8, +8 lines =@@ + // /*GOTO TYPE*/M; + // m; + ++ ++ + // === goToType === + // === /module1.ts === + // module [|M|] { \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionPrimitives.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionPrimitives.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionPrimitives.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionPrimitives.baseline.jsonc diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff new file mode 100644 index 0000000000..c6af7e0399 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToTypeDefinitionUnionType.baseline.jsonc ++++ new.goToTypeDefinitionUnionType.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff new file mode 100644 index 0000000000..0e31d3f005 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff @@ -0,0 +1,43 @@ +--- old.goToTypeDefinition_Pick.baseline.jsonc ++++ new.goToTypeDefinition_Pick.baseline.jsonc +@@= skipped -7, +7 lines =@@ + // declare const user2: PickedUser + // user2 + +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * From T, pick a set of properties whose keys are in the union K +-// */ +-// type Pick = [|{ +-// [P in K]: T[P]; +-// }|]; +-// +-// /** +-// * Construct a type with a set of properties K of type T +-// --- (line: --) skipped --- ++ + + // === goToType === + // === /goToTypeDefinition_Pick.ts === +-// type User = [|{ id: number; name: string; }|]; +-// declare const user: Pick +-// user ++// --- (line: 3) skipped --- + // + // type PickedUser = Pick + // declare const user2: PickedUser + // /*GOTO TYPE*/user2 +- +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * From T, pick a set of properties whose keys are in the union K +-// */ +-// type Pick = [|{ +-// [P in K]: T[P]; +-// }|]; +-// +-// /** +-// * Construct a type with a set of properties K of type T +-// --- (line: --) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff new file mode 100644 index 0000000000..efe5b86899 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff @@ -0,0 +1,433 @@ +--- old.goToTypeDefinition_arrayType.baseline.jsonc ++++ new.goToTypeDefinition_arrayType.baseline.jsonc +@@= skipped -5, +5 lines =@@ + // + // type UsersArr = Array + // declare const users2: UsersArr +-// --- (line: 7) skipped --- +- +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// slice(start?: number, end?: number): T[]; +-// } +-// +-// interface [|Array|] { +-// /** +-// * Gets or sets the length of the array. This is a number one higher than the highest index in the array. +-// */ +-// length: number; +-// /** +-// * Returns a string representation of an array. +-// */ +-// toString(): string; +-// /** +-// * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods. +-// */ +-// toLocaleString(): string; +-// /** +-// * Removes the last element from an array and returns it. +-// * If the array is empty, undefined is returned and the array is not modified. +-// */ +-// pop(): T | undefined; +-// /** +-// * Appends new elements to the end of an array, and returns the new length of the array. +-// * @param items New elements to add to the array. +-// */ +-// push(...items: T[]): number; +-// /** +-// * Combines two or more arrays. +-// * This method returns a new array without modifying any existing arrays. +-// * @param items Additional arrays and/or items to add to the end of the array. +-// */ +-// concat(...items: ConcatArray[]): T[]; +-// /** +-// * Combines two or more arrays. +-// * This method returns a new array without modifying any existing arrays. +-// * @param items Additional arrays and/or items to add to the end of the array. +-// */ +-// concat(...items: (T | ConcatArray)[]): T[]; +-// /** +-// * Adds all the elements of an array into a string, separated by the specified separator string. +-// * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma. +-// */ +-// join(separator?: string): string; +-// /** +-// * Reverses the elements in an array in place. +-// * This method mutates the array and returns a reference to the same array. +-// */ +-// reverse(): T[]; +-// /** +-// * Removes the first element from an array and returns it. +-// * If the array is empty, undefined is returned and the array is not modified. +-// */ +-// shift(): T | undefined; +-// /** +-// * Returns a copy of a section of an array. +-// * For both start and end, a negative index can be used to indicate an offset from the end of the array. +-// * For example, -2 refers to the second to last element of the array. +-// * @param start The beginning index of the specified portion of the array. +-// * If start is undefined, then the slice begins at index 0. +-// * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'. +-// * If end is undefined, then the slice extends to the end of the array. +-// */ +-// slice(start?: number, end?: number): T[]; +-// /** +-// * Sorts an array in place. +-// * This method mutates the array and returns a reference to the same array. +-// * @param compareFn Function used to determine the order of the elements. It is expected to return +-// * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive +-// * value otherwise. If omitted, the elements are sorted in ascending, UTF-16 code unit order. +-// * ```ts +-// * [11,2,22,1].sort((a, b) => a - b) +-// * ``` +-// */ +-// sort(compareFn?: (a: T, b: T) => number): this; +-// /** +-// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +-// * @param start The zero-based location in the array from which to start removing elements. +-// * @param deleteCount The number of elements to remove. Omitting this argument will remove all elements from the start +-// * paramater location to end of the array. If value of this argument is either a negative number, zero, undefined, or a type +-// * that cannot be converted to an integer, the function will evaluate the argument as zero and not remove any elements. +-// * @returns An array containing the elements that were deleted. +-// */ +-// splice(start: number, deleteCount?: number): T[]; +-// /** +-// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +-// * @param start The zero-based location in the array from which to start removing elements. +-// * @param deleteCount The number of elements to remove. If value of this argument is either a negative number, zero, +-// * undefined, or a type that cannot be converted to an integer, the function will evaluate the argument as zero and +-// * not remove any elements. +-// * @param items Elements to insert into the array in place of the deleted elements. +-// * @returns An array containing the elements that were deleted. +-// */ +-// splice(start: number, deleteCount: number, ...items: T[]): T[]; +-// /** +-// * Inserts new elements at the start of an array, and returns the new length of the array. +-// * @param items Elements to insert at the start of the array. +-// */ +-// unshift(...items: T[]): number; +-// /** +-// * Returns the index of the first occurrence of a value in an array, or -1 if it is not present. +-// * @param searchElement The value to locate in the array. +-// * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. +-// */ +-// indexOf(searchElement: T, fromIndex?: number): number; +-// /** +-// * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present. +-// * @param searchElement The value to locate in the array. +-// * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array. +-// */ +-// lastIndexOf(searchElement: T, fromIndex?: number): number; +-// /** +-// * Determines whether all the members of an array satisfy the specified test. +-// * @param predicate A function that accepts up to three arguments. The every method calls +-// * the predicate function for each element in the array until the predicate returns a value +-// * which is coercible to the Boolean value false, or until the end of the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. +-// * If thisArg is omitted, undefined is used as the this value. +-// */ +-// every(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[]; +-// /** +-// * Determines whether all the members of an array satisfy the specified test. +-// * @param predicate A function that accepts up to three arguments. The every method calls +-// * the predicate function for each element in the array until the predicate returns a value +-// * which is coercible to the Boolean value false, or until the end of the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. +-// * If thisArg is omitted, undefined is used as the this value. +-// */ +-// every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +-// /** +-// * Determines whether the specified callback function returns true for any element of an array. +-// * @param predicate A function that accepts up to three arguments. The some method calls +-// * the predicate function for each element in the array until the predicate returns a value +-// * which is coercible to the Boolean value true, or until the end of the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. +-// * If thisArg is omitted, undefined is used as the this value. +-// */ +-// some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +-// /** +-// * Performs the specified action for each element in an array. +-// * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; +-// /** +-// * Calls a defined callback function on each element of an array, and returns an array that contains the results. +-// * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; +-// /** +-// * Returns the elements of an array that meet the condition specified in a callback function. +-// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// filter(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; +-// /** +-// * Returns the elements of an array that meet the condition specified in a callback function. +-// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; +-// /** +-// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +-// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +-// /** +-// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +-// /** +-// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +-// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +-// /** +-// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +-// +-// [n: number]: T; +-// } +-// +-// interface ArrayConstructor { +-// new (arrayLength?: number): any[]; +-// --- (line: --) skipped --- +- +-// --- (line: --) skipped --- +-// readonly prototype: any[]; +-// } +-// +-// declare var [|Array|]: ArrayConstructor; +-// +-// interface TypedPropertyDescriptor { +-// enumerable?: boolean; +-// --- (line: --) skipped --- ++// // --- (line: 7) skipped --- ++ ++ + + // === goToType === + // === /goToTypeDefinition_arrayType.ts === +@@= skipped -223, +18 lines =@@ + // declare const users3: CustomArray + // users3 + +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// slice(start?: number, end?: number): T[]; +-// } +-// +-// interface [|Array|] { +-// /** +-// * Gets or sets the length of the array. This is a number one higher than the highest index in the array. +-// */ +-// length: number; +-// /** +-// * Returns a string representation of an array. +-// */ +-// toString(): string; +-// /** +-// * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods. +-// */ +-// toLocaleString(): string; +-// /** +-// * Removes the last element from an array and returns it. +-// * If the array is empty, undefined is returned and the array is not modified. +-// */ +-// pop(): T | undefined; +-// /** +-// * Appends new elements to the end of an array, and returns the new length of the array. +-// * @param items New elements to add to the array. +-// */ +-// push(...items: T[]): number; +-// /** +-// * Combines two or more arrays. +-// * This method returns a new array without modifying any existing arrays. +-// * @param items Additional arrays and/or items to add to the end of the array. +-// */ +-// concat(...items: ConcatArray[]): T[]; +-// /** +-// * Combines two or more arrays. +-// * This method returns a new array without modifying any existing arrays. +-// * @param items Additional arrays and/or items to add to the end of the array. +-// */ +-// concat(...items: (T | ConcatArray)[]): T[]; +-// /** +-// * Adds all the elements of an array into a string, separated by the specified separator string. +-// * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma. +-// */ +-// join(separator?: string): string; +-// /** +-// * Reverses the elements in an array in place. +-// * This method mutates the array and returns a reference to the same array. +-// */ +-// reverse(): T[]; +-// /** +-// * Removes the first element from an array and returns it. +-// * If the array is empty, undefined is returned and the array is not modified. +-// */ +-// shift(): T | undefined; +-// /** +-// * Returns a copy of a section of an array. +-// * For both start and end, a negative index can be used to indicate an offset from the end of the array. +-// * For example, -2 refers to the second to last element of the array. +-// * @param start The beginning index of the specified portion of the array. +-// * If start is undefined, then the slice begins at index 0. +-// * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'. +-// * If end is undefined, then the slice extends to the end of the array. +-// */ +-// slice(start?: number, end?: number): T[]; +-// /** +-// * Sorts an array in place. +-// * This method mutates the array and returns a reference to the same array. +-// * @param compareFn Function used to determine the order of the elements. It is expected to return +-// * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive +-// * value otherwise. If omitted, the elements are sorted in ascending, UTF-16 code unit order. +-// * ```ts +-// * [11,2,22,1].sort((a, b) => a - b) +-// * ``` +-// */ +-// sort(compareFn?: (a: T, b: T) => number): this; +-// /** +-// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +-// * @param start The zero-based location in the array from which to start removing elements. +-// * @param deleteCount The number of elements to remove. Omitting this argument will remove all elements from the start +-// * paramater location to end of the array. If value of this argument is either a negative number, zero, undefined, or a type +-// * that cannot be converted to an integer, the function will evaluate the argument as zero and not remove any elements. +-// * @returns An array containing the elements that were deleted. +-// */ +-// splice(start: number, deleteCount?: number): T[]; +-// /** +-// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +-// * @param start The zero-based location in the array from which to start removing elements. +-// * @param deleteCount The number of elements to remove. If value of this argument is either a negative number, zero, +-// * undefined, or a type that cannot be converted to an integer, the function will evaluate the argument as zero and +-// * not remove any elements. +-// * @param items Elements to insert into the array in place of the deleted elements. +-// * @returns An array containing the elements that were deleted. +-// */ +-// splice(start: number, deleteCount: number, ...items: T[]): T[]; +-// /** +-// * Inserts new elements at the start of an array, and returns the new length of the array. +-// * @param items Elements to insert at the start of the array. +-// */ +-// unshift(...items: T[]): number; +-// /** +-// * Returns the index of the first occurrence of a value in an array, or -1 if it is not present. +-// * @param searchElement The value to locate in the array. +-// * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. +-// */ +-// indexOf(searchElement: T, fromIndex?: number): number; +-// /** +-// * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present. +-// * @param searchElement The value to locate in the array. +-// * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array. +-// */ +-// lastIndexOf(searchElement: T, fromIndex?: number): number; +-// /** +-// * Determines whether all the members of an array satisfy the specified test. +-// * @param predicate A function that accepts up to three arguments. The every method calls +-// * the predicate function for each element in the array until the predicate returns a value +-// * which is coercible to the Boolean value false, or until the end of the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. +-// * If thisArg is omitted, undefined is used as the this value. +-// */ +-// every(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[]; +-// /** +-// * Determines whether all the members of an array satisfy the specified test. +-// * @param predicate A function that accepts up to three arguments. The every method calls +-// * the predicate function for each element in the array until the predicate returns a value +-// * which is coercible to the Boolean value false, or until the end of the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. +-// * If thisArg is omitted, undefined is used as the this value. +-// */ +-// every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +-// /** +-// * Determines whether the specified callback function returns true for any element of an array. +-// * @param predicate A function that accepts up to three arguments. The some method calls +-// * the predicate function for each element in the array until the predicate returns a value +-// * which is coercible to the Boolean value true, or until the end of the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. +-// * If thisArg is omitted, undefined is used as the this value. +-// */ +-// some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +-// /** +-// * Performs the specified action for each element in an array. +-// * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; +-// /** +-// * Calls a defined callback function on each element of an array, and returns an array that contains the results. +-// * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; +-// /** +-// * Returns the elements of an array that meet the condition specified in a callback function. +-// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// filter(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; +-// /** +-// * Returns the elements of an array that meet the condition specified in a callback function. +-// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +-// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +-// */ +-// filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; +-// /** +-// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +-// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +-// /** +-// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +-// /** +-// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +-// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +-// /** +-// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +-// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +-// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +-// */ +-// reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +-// +-// [n: number]: T; +-// } +-// +-// interface ArrayConstructor { +-// new (arrayLength?: number): any[]; +-// --- (line: --) skipped --- + +-// --- (line: --) skipped --- +-// readonly prototype: any[]; +-// } +-// +-// declare var [|Array|]: ArrayConstructor; +-// +-// interface TypedPropertyDescriptor { +-// enumerable?: boolean; +-// --- (line: --) skipped --- + + // === goToType === + // === /goToTypeDefinition_arrayType.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff new file mode 100644 index 0000000000..cea1fc9470 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff @@ -0,0 +1,65 @@ +--- old.goToTypeDefinition_promiseType.baseline.jsonc ++++ new.goToTypeDefinition_promiseType.baseline.jsonc +@@= skipped -6, +6 lines =@@ + // + // export {} + +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- ++ + + // === goToType === + // === /goToTypeDefinition_promiseType.ts === +@@= skipped -34, +10 lines =@@ + // const /*GOTO TYPE*/promisedBob = getUser() + // + // export {} +- +-// === lib.d.ts === +-// --- (line: --) skipped --- +-// /** +-// * Represents the completion of an asynchronous operation +-// */ +-// interface [|Promise|] { +-// /** +-// * Attaches callbacks for the resolution and/or rejection of the Promise. +-// * @param onfulfilled The callback to execute when the Promise is resolved. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of which ever callback is executed. +-// */ +-// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +-// +-// /** +-// * Attaches a callback for only the rejection of the Promise. +-// * @param onrejected The callback to execute when the Promise is rejected. +-// * @returns A Promise for the completion of the callback. +-// */ +-// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +-// } +-// +-// /** +-// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +-// --- (line: --) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff new file mode 100644 index 0000000000..e97eccde75 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff @@ -0,0 +1,166 @@ +--- old.goToTypeDefinition_returnType.baseline.jsonc ++++ new.goToTypeDefinition_returnType.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // interface J { y: number; } + // + // function f0(): I { return { x: 0 }; } +-// --- (line: 5) skipped --- ++// // --- (line: 5) skipped --- + + // --- (line: 21) skipped --- + // function f8(j: J): J; +@@= skipped -10, +10 lines =@@ + // f1(); + // f2(); + // f3(); +-// --- (line: 29) skipped --- ++// // --- (line: 29) skipped --- ++ ++ + + // === goToType === + // === /goToTypeDefinition_returnType.ts === +@@= skipped -13, +15 lines =@@ + // const f1: T = i => ({ x: i.x + 1 }); + // + // const f2 = (i: I): I => ({ x: i.x + 1 }); +-// --- (line: 10) skipped --- ++// // --- (line: 10) skipped --- + + // --- (line: 22) skipped --- + // function f8(ij: any): any { return ij; } +@@= skipped -10, +10 lines =@@ + // f2(); + // f3(); + // f4(); +-// --- (line: 30) skipped --- ++// // --- (line: 30) skipped --- ++ ++ + + // === goToType === + // === /goToTypeDefinition_returnType.ts === +@@= skipped -8, +10 lines =@@ + // interface J { y: number; } + // + // function f0(): I { return { x: 0 }; } +-// --- (line: 5) skipped --- ++// // --- (line: 5) skipped --- + + // --- (line: 23) skipped --- + // +@@= skipped -10, +10 lines =@@ + // f3(); + // f4(); + // f5(); +-// --- (line: 31) skipped --- ++// // --- (line: 31) skipped --- ++ ++ + + // === goToType === + // === /goToTypeDefinition_returnType.ts === +@@= skipped -12, +14 lines =@@ + // + // const f4 = (i: I) => i; + // +-// --- (line: 15) skipped --- ++// // --- (line: 15) skipped --- + + // --- (line: 24) skipped --- + // f0(); +@@= skipped -13, +13 lines =@@ + // f7(); + // f8(); + ++ ++ + // === goToType === + // === /goToTypeDefinition_returnType.ts === + // interface [|I|] { x: number; } + // interface J { y: number; } + // + // function f0(): I { return { x: 0 }; } +-// --- (line: 5) skipped --- ++// // --- (line: 5) skipped --- + + // --- (line: 25) skipped --- + // f1(); +@@= skipped -18, +20 lines =@@ + // f7(); + // f8(); + ++ ++ + // === goToType === + // === /goToTypeDefinition_returnType.ts === + // interface [|I|] { x: number; } +@@= skipped -7, +9 lines =@@ + // + // function f0(): I { return { x: 0 }; } + // +-// --- (line: 6) skipped --- ++// // --- (line: 6) skipped --- + + // --- (line: 26) skipped --- + // f2(); +@@= skipped -11, +11 lines =@@ + // f7(); + // f8(); + ++ ++ + // === goToType === + // === /goToTypeDefinition_returnType.ts === + // interface [|I|] { x: number; } +@@= skipped -7, +9 lines =@@ + // + // function f0(): I { return { x: 0 }; } + // +-// --- (line: 6) skipped --- ++// // --- (line: 6) skipped --- + + // --- (line: 27) skipped --- + // f3(); +@@= skipped -10, +10 lines =@@ + // f7(); + // f8(); + ++ ++ + // === goToType === + // === /goToTypeDefinition_returnType.ts === +-// --- (line: 15) skipped --- +-// +-// const f6 = (i: I, j: J, b: boolean) => b ? i : j; +-// +-// const [|{| contextId: 0 |}f7|] = (i: I) => {}; +-// +-// function f8(i: I): I; +-// function f8(j: J): J; +-// --- (line: 23) skipped --- +- + // --- (line: 28) skipped --- + // f4(); + // f5(); +@@= skipped -19, +11 lines =@@ + // /*GOTO TYPE*/f7(); + // f8(); + ++ ++ + // === goToType === + // === /goToTypeDefinition_returnType.ts === +-// --- (line: 19) skipped --- +-// +-// function f8(i: I): I; +-// function f8(j: J): J; ++// --- (line: 17) skipped --- ++// ++// const f7 = (i: I) => {}; ++// ++// function [|f8|](i: I): I; ++// function [|f8|](j: J): J; + // function [|f8|](ij: any): any { return ij; } + // + // f0(); \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff new file mode 100644 index 0000000000..f856467e9d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.goToTypeDefinition_typeReference.baseline.jsonc ++++ new.goToTypeDefinition_typeReference.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc.diff new file mode 100644 index 0000000000..f5b3b5c121 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typedef.baseline.jsonc.diff @@ -0,0 +1,13 @@ +--- old.goToTypeDefinition_typedef.baseline.jsonc ++++ new.goToTypeDefinition_typedef.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToType === + // === /a.js === + // /** +-// * [|@typedef {object} I +-// * @property {number} x ++// * @typedef {object} I ++// * [|@property {number} x + // |]*/ + // + // /** @type {I} */ \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/goToType/typedefinition01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc similarity index 100% rename from testdata/baselines/reference/fourslash/goToType/typedefinition01.baseline.jsonc rename to testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff new file mode 100644 index 0000000000..45d2a4f6e2 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff @@ -0,0 +1,2 @@ +--- old.typedefinition01.baseline.jsonc ++++ new.typedefinition01.baseline.jsonc \ No newline at end of file From 5c07c98f669bc7b21514139bb751960e6a7ac5b7 Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Mon, 17 Nov 2025 12:28:53 -0800 Subject: [PATCH 04/12] fix skipped lines baseline comment --- internal/fourslash/baselineutil.go | 2 +- ...lightAtInheritedProperties6.baseline.jsonc | 4 +- ...rameterPropertyDeclaration1.baseline.jsonc | 6 +- ...rameterPropertyDeclaration2.baseline.jsonc | 8 +- ...rameterPropertyDeclaration3.baseline.jsonc | 8 +- ...cumentHighlightJSDocTypedef.baseline.jsonc | 4 +- ...entHighlightTemplateStrings.baseline.jsonc | 2 +- ...htsInvalidModifierLocations.baseline.jsonc | 2 +- .../getOccurrencesAbstract01.baseline.jsonc | 10 +- .../getOccurrencesAbstract02.baseline.jsonc | 4 +- .../getOccurrencesAbstract03.baseline.jsonc | 4 +- .../getOccurrencesAsyncAwait.baseline.jsonc | 10 +- ...sClassExpressionConstructor.baseline.jsonc | 8 +- ...encesClassExpressionPrivate.baseline.jsonc | 10 +- ...rencesClassExpressionPublic.baseline.jsonc | 10 +- ...rencesClassExpressionStatic.baseline.jsonc | 8 +- ...esClassExpressionStaticThis.baseline.jsonc | 10 +- ...urrencesClassExpressionThis.baseline.jsonc | 18 +- .../getOccurrencesConstructor.baseline.jsonc | 8 +- .../getOccurrencesDeclare1.baseline.jsonc | 6 +- .../getOccurrencesDeclare2.baseline.jsonc | 2 +- .../getOccurrencesDeclare3.baseline.jsonc | 8 +- .../getOccurrencesExport1.baseline.jsonc | 20 +- .../getOccurrencesExport2.baseline.jsonc | 2 +- .../getOccurrencesExport3.baseline.jsonc | 6 +- .../getOccurrencesIfElse.baseline.jsonc | 14 +- .../getOccurrencesIfElse2.baseline.jsonc | 4 +- .../getOccurrencesIfElse3.baseline.jsonc | 4 +- ...ccurrencesLoopBreakContinue.baseline.jsonc | 14 +- ...currencesLoopBreakContinue2.baseline.jsonc | 10 +- ...currencesLoopBreakContinue3.baseline.jsonc | 28 +- ...currencesLoopBreakContinue4.baseline.jsonc | 16 +- ...urrencesModifiersNegatives1.baseline.jsonc | 76 ++--- .../getOccurrencesPrivate1.baseline.jsonc | 12 +- .../getOccurrencesPrivate2.baseline.jsonc | 4 +- .../getOccurrencesProtected1.baseline.jsonc | 24 +- .../getOccurrencesProtected2.baseline.jsonc | 6 +- .../getOccurrencesPublic1.baseline.jsonc | 18 +- .../getOccurrencesPublic2.baseline.jsonc | 4 +- .../getOccurrencesReadonly3.baseline.jsonc | 2 +- .../getOccurrencesReturn.baseline.jsonc | 6 +- .../getOccurrencesReturn2.baseline.jsonc | 8 +- .../getOccurrencesSetAndGet.baseline.jsonc | 4 +- .../getOccurrencesSetAndGet2.baseline.jsonc | 4 +- .../getOccurrencesStatic1.baseline.jsonc | 6 +- .../getOccurrencesSuper.baseline.jsonc | 14 +- .../getOccurrencesSuper2.baseline.jsonc | 6 +- .../getOccurrencesSuper3.baseline.jsonc | 4 +- ...etOccurrencesSuperNegatives.baseline.jsonc | 10 +- ...currencesSwitchCaseDefault2.baseline.jsonc | 12 +- .../getOccurrencesThis.baseline.jsonc | 4 +- .../getOccurrencesThis2.baseline.jsonc | 12 +- .../getOccurrencesThis3.baseline.jsonc | 4 +- .../getOccurrencesThis4.baseline.jsonc | 52 ++-- .../getOccurrencesThis5.baseline.jsonc | 52 ++-- .../getOccurrencesThrow.baseline.jsonc | 16 +- .../getOccurrencesThrow2.baseline.jsonc | 2 +- .../getOccurrencesThrow3.baseline.jsonc | 4 +- .../getOccurrencesThrow4.baseline.jsonc | 10 +- .../getOccurrencesThrow8.baseline.jsonc | 2 +- .../getOccurrencesYield.baseline.jsonc | 6 +- .../findAllReferencesLinkTag1.baseline.jsonc | 20 +- .../findAllReferencesLinkTag2.baseline.jsonc | 4 +- .../findAllReferencesLinkTag3.baseline.jsonc | 4 +- ...dAllReferencesOfConstructor.baseline.jsonc | 6 +- ...ndAllRefsForDefaultExport09.baseline.jsonc | 6 +- ...indAllRefsForDefaultKeyword.baseline.jsonc | 6 +- ...icInstanceMethodInheritance.baseline.jsonc | 4 +- ...InstancePropertyInheritance.baseline.jsonc | 8 +- ...findAllRefsForStringLiteral.baseline.jsonc | 2 +- ...AllRefsInheritedProperties4.baseline.jsonc | 2 +- ...AllRefsInheritedProperties5.baseline.jsonc | 4 +- .../findAllRefsIsDefinition.baseline.jsonc | 6 +- .../findAllRefsJsDocImportTag2.baseline.jsonc | 2 +- .../findAllRefsJsDocImportTag3.baseline.jsonc | 2 +- ...NonexistentPropertyNoCrash1.baseline.jsonc | 2 +- .../findAllRefsOnDefinition.baseline.jsonc | 6 +- ...ertyDeclaration_inheritance.baseline.jsonc | 2 +- ...AllRefsPrivateNameAccessors.baseline.jsonc | 10 +- ...ndAllRefsPrivateNameMethods.baseline.jsonc | 4 +- ...llRefsPrivateNameProperties.baseline.jsonc | 6 +- .../findAllRefsThisKeyword.baseline.jsonc | 14 +- .../findAllRefsUnionProperty.baseline.jsonc | 6 +- ...horthandPropertyAssignment2.baseline.jsonc | 2 +- ...encesDefinitionDisplayParts.baseline.jsonc | 4 +- ...initionAcrossGlobalProjects.baseline.jsonc | 6 +- ...initionAcrossModuleProjects.baseline.jsonc | 8 +- .../localGetReferences.baseline.jsonc | 274 ++++++++--------- ...arameterPropertyDeclaration.baseline.jsonc | 2 +- .../referencesForAmbients.baseline.jsonc | 12 +- .../referencesForClassLocal.baseline.jsonc | 8 +- ...encesForDeclarationKeywords.baseline.jsonc | 26 +- ...referencesForExportedValues.baseline.jsonc | 2 +- ...rencesForExpressionKeywords.baseline.jsonc | 2 +- ...sForGlobalsInExternalModule.baseline.jsonc | 18 +- ...ncesForInheritedProperties9.baseline.jsonc | 2 +- .../referencesForLabel5.baseline.jsonc | 2 +- ...rencesForMergedDeclarations.baseline.jsonc | 6 +- ...encesForMergedDeclarations3.baseline.jsonc | 2 +- ...encesForMergedDeclarations7.baseline.jsonc | 2 +- .../referencesForModifiers.baseline.jsonc | 12 +- .../referencesForNoContext.baseline.jsonc | 4 +- .../referencesForOverrides.baseline.jsonc | 18 +- ...erencesForStatementKeywords.baseline.jsonc | 56 ++-- ...ticsAndMembersWithSameNames.baseline.jsonc | 26 +- ...eferencesForUnionProperties.baseline.jsonc | 2 +- .../remoteGetReferences.baseline.jsonc | 284 +++++++++--------- .../renameImportOfExportEquals.baseline.jsonc | 6 +- ...fsClassWithStaticThisAccess.baseline.jsonc | 2 +- ...ssWithStaticThisAccess.baseline.jsonc.diff | 2 +- ...gElementInitializerExternal.baseline.jsonc | 2 +- ...entInitializerExternal.baseline.jsonc.diff | 2 +- .../renameCommentsAndStrings4.baseline.jsonc | 2 +- ...ameCommentsAndStrings4.baseline.jsonc.diff | 2 +- ...ContextuallyTypedProperties.baseline.jsonc | 10 +- ...xtuallyTypedProperties.baseline.jsonc.diff | 10 +- ...ontextuallyTypedProperties2.baseline.jsonc | 10 +- ...tuallyTypedProperties2.baseline.jsonc.diff | 10 +- .../renameDeclarationKeywords.baseline.jsonc | 18 +- ...ameDeclarationKeywords.baseline.jsonc.diff | 36 +-- ...eDestructuringClassProperty.baseline.jsonc | 2 +- ...ructuringClassProperty.baseline.jsonc.diff | 10 - .../renameForStringLiteral.baseline.jsonc | 2 +- ...renameForStringLiteral.baseline.jsonc.diff | 2 +- .../renameImportOfExportEquals.baseline.jsonc | 10 +- ...meImportOfExportEquals.baseline.jsonc.diff | 25 +- ...cationsForClassExpression01.baseline.jsonc | 6 +- ...nsForClassExpression01.baseline.jsonc.diff | 6 +- .../renameModifiers.baseline.jsonc | 12 +- .../renameModifiers.baseline.jsonc.diff | 197 ++++-------- .../renameStringLiteralOk1.baseline.jsonc | 2 +- ...renameStringLiteralOk1.baseline.jsonc.diff | 2 +- .../renameStringLiteralTypes2.baseline.jsonc | 14 +- ...ameStringLiteralTypes2.baseline.jsonc.diff | 14 +- .../renameStringLiteralTypes3.baseline.jsonc | 6 +- ...ameStringLiteralTypes3.baseline.jsonc.diff | 15 +- ...eLiteralsComputedProperties.baseline.jsonc | 22 +- ...ralsComputedProperties.baseline.jsonc.diff | 118 +------- ...ateLiteralsDefinePropertyJs.baseline.jsonc | 4 +- ...teralsDefinePropertyJs.baseline.jsonc.diff | 4 +- ...eclarationMapGoToDefinition.baseline.jsonc | 2 +- ...ationMapGoToDefinition.baseline.jsonc.diff | 11 +- ...efinitionRelativeSourceRoot.baseline.jsonc | 2 +- ...tionRelativeSourceRoot.baseline.jsonc.diff | 11 +- ...nSameNameDifferentDirectory.baseline.jsonc | 6 +- ...NameDifferentDirectory.baseline.jsonc.diff | 25 +- .../goToDefinitionAwait3.baseline.jsonc | 2 +- .../goToDefinitionAwait3.baseline.jsonc.diff | 2 +- ...DefinitionClassConstructors.baseline.jsonc | 4 +- ...itionClassConstructors.baseline.jsonc.diff | 14 +- ...structorOfClassExpression01.baseline.jsonc | 8 +- ...torOfClassExpression01.baseline.jsonc.diff | 8 +- ...initionConstructorOverloads.baseline.jsonc | 6 +- ...onConstructorOverloads.baseline.jsonc.diff | 25 +- ...ionFunctionOverloadsInClass.baseline.jsonc | 2 +- ...nctionOverloadsInClass.baseline.jsonc.diff | 7 +- .../goToDefinitionFunctionType.baseline.jsonc | 4 +- ...DefinitionFunctionType.baseline.jsonc.diff | 12 +- ...finitionInMemberDeclaration.baseline.jsonc | 12 +- ...ionInMemberDeclaration.baseline.jsonc.diff | 58 +--- ...oToDefinitionIndexSignature.baseline.jsonc | 2 +- ...finitionIndexSignature.baseline.jsonc.diff | 12 +- ...ToDefinitionMethodOverloads.baseline.jsonc | 4 +- ...initionMethodOverloads.baseline.jsonc.diff | 12 +- .../goToDefinitionModifiers.baseline.jsonc | 16 +- ...oToDefinitionModifiers.baseline.jsonc.diff | 44 +-- ...efinitionOverriddenMember16.baseline.jsonc | 2 +- ...tionOverriddenMember16.baseline.jsonc.diff | 8 - .../goToDefinitionSourceUnit.baseline.jsonc | 4 +- ...ToDefinitionSourceUnit.baseline.jsonc.diff | 6 +- ...nTypeProperty_discriminated.baseline.jsonc | 2 +- ...Property_discriminated.baseline.jsonc.diff | 12 +- .../goToDefinitionYield3.baseline.jsonc | 2 +- .../goToDefinitionYield3.baseline.jsonc.diff | 2 +- ..._filteringGenericMappedType.baseline.jsonc | 2 +- ...eringGenericMappedType.baseline.jsonc.diff | 2 +- .../goToDefinition_super.baseline.jsonc | 4 +- .../goToDefinition_super.baseline.jsonc.diff | 16 +- .../gotoDefinitionLinkTag1.baseline.jsonc | 12 +- ...gotoDefinitionLinkTag1.baseline.jsonc.diff | 24 +- .../goToDefinition/jsDocSee1.baseline.jsonc | 6 +- .../jsDocSee1.baseline.jsonc.diff | 14 +- .../goToDefinition/jsDocSee2.baseline.jsonc | 8 +- .../jsDocSee2.baseline.jsonc.diff | 44 +-- .../goToDefinition/jsDocSee4.baseline.jsonc | 4 +- .../jsDocSee4.baseline.jsonc.diff | 12 +- .../reallyLargeFile.baseline.jsonc | 2 +- .../reallyLargeFile.baseline.jsonc.diff | 2 +- ...mentationInterfaceMethod_01.baseline.jsonc | 2 +- ...tionInterfaceMethod_01.baseline.jsonc.diff | 8 +- ...mentationInterfaceMethod_03.baseline.jsonc | 2 +- ...tionInterfaceMethod_03.baseline.jsonc.diff | 11 +- ...mentationInterfaceMethod_05.baseline.jsonc | 2 +- ...tionInterfaceMethod_05.baseline.jsonc.diff | 2 +- ...oImplementationInterface_00.baseline.jsonc | 2 +- ...ementationInterface_00.baseline.jsonc.diff | 2 +- ...oImplementationInterface_01.baseline.jsonc | 2 +- ...ementationInterface_01.baseline.jsonc.diff | 2 +- ...oImplementationInterface_02.baseline.jsonc | 2 +- ...ementationInterface_02.baseline.jsonc.diff | 2 +- ...oImplementationInterface_04.baseline.jsonc | 2 +- ...ementationInterface_04.baseline.jsonc.diff | 2 +- ...oImplementationInterface_06.baseline.jsonc | 2 +- ...ementationInterface_06.baseline.jsonc.diff | 2 +- ...oImplementationInterface_07.baseline.jsonc | 2 +- ...ementationInterface_07.baseline.jsonc.diff | 2 +- ...rthandPropertyAssignment_00.baseline.jsonc | 2 +- ...dPropertyAssignment_00.baseline.jsonc.diff | 2 +- ...rthandPropertyAssignment_01.baseline.jsonc | 4 +- ...dPropertyAssignment_01.baseline.jsonc.diff | 4 +- ...oToImplementation_satisfies.baseline.jsonc | 2 +- ...plementation_satisfies.baseline.jsonc.diff | 2 +- .../goToTypeDefinition2.baseline.jsonc | 2 +- .../goToTypeDefinition2.baseline.jsonc.diff | 2 +- ...goToTypeDefinitionModifiers.baseline.jsonc | 20 +- ...ypeDefinitionModifiers.baseline.jsonc.diff | 64 +--- ...oToTypeDefinition_arrayType.baseline.jsonc | 2 +- ...peDefinition_arrayType.baseline.jsonc.diff | 15 +- ...ToTypeDefinition_returnType.baseline.jsonc | 20 +- ...eDefinition_returnType.baseline.jsonc.diff | 98 +----- 220 files changed, 1212 insertions(+), 1724 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 11f2296664..4acc0053a8 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -637,7 +637,7 @@ func (t *textWithContext) add(detail *baselineDetail) { if t.isLibFile { skippedString = "--- (line: --) skipped ---\n" } else { - skippedString = fmt.Sprintf(`// --- (line: %v) skipped ---`, posLineIndex+t.nLinesContext+1) + skippedString = fmt.Sprintf(`--- (line: %v) skipped ---`, posLineIndex+t.nLinesContext+1) } t.readableContents.WriteString("\n") diff --git a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtInheritedProperties6.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtInheritedProperties6.baseline.jsonc index e819cd0446..e010a5eca3 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtInheritedProperties6.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtInheritedProperties6.baseline.jsonc @@ -5,7 +5,7 @@ // prop1: string; // } // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -17,7 +17,7 @@ // } // // class D extends C { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration1.baseline.jsonc index 5176a15ed5..bdee4ee2f5 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration1.baseline.jsonc @@ -10,7 +10,7 @@ // // let localPublic = publicParam; // this.publicParam += " Hello!"; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -66,7 +66,7 @@ // // let localPublic = publicParam; // this.publicParam += " Hello!"; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -82,7 +82,7 @@ // // let localPublic = publicParam; // this.publicParam += " Hello!"; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration2.baseline.jsonc index 69914c5798..506a26e40c 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration2.baseline.jsonc @@ -10,7 +10,7 @@ // this.privateParam += 10; // // let localPublic = publicParam; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -29,7 +29,7 @@ // this.publicParam += " Hello!"; // // let localProtected = protectedParam; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -66,7 +66,7 @@ // this.privateParam += 10; // // let localPublic = publicParam; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -85,7 +85,7 @@ // this.publicParam += " Hello!"; // // let localProtected = protectedParam; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration3.baseline.jsonc index c5e2753dbe..6f6a8128a0 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightAtParameterPropertyDeclaration3.baseline.jsonc @@ -10,7 +10,7 @@ // this.privateParam += 10; // // let localPublic = publicParam; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -29,7 +29,7 @@ // this.publicParam += " Hello!"; // // let localProtected = protectedParam; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -66,7 +66,7 @@ // this.privateParam += 10; // // let localPublic = publicParam; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -85,7 +85,7 @@ // this.publicParam += " Hello!"; // // let localProtected = protectedParam; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightJSDocTypedef.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightJSDocTypedef.baseline.jsonc index 8e19a1b263..45d27cb06e 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightJSDocTypedef.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightJSDocTypedef.baseline.jsonc @@ -6,7 +6,7 @@ // * bar: number; // * }} Foo // */ -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -19,7 +19,7 @@ // * }} Foo // */ // -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightTemplateStrings.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightTemplateStrings.baseline.jsonc index e7504bc218..000c5e8db0 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightTemplateStrings.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightTemplateStrings.baseline.jsonc @@ -8,4 +8,4 @@ // return 1; // case "b": // return 2; -// // --- (line: 11) skipped --- \ No newline at end of file +// --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightsInvalidModifierLocations.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightsInvalidModifierLocations.baseline.jsonc index 694ac0952d..ee841cc3dd 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightsInvalidModifierLocations.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/documentHighlightsInvalidModifierLocations.baseline.jsonc @@ -5,7 +5,7 @@ // } // function f(readonly p) {} // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract01.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract01.baseline.jsonc index 3d811b7b7a..14420aa91d 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract01.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract01.baseline.jsonc @@ -8,7 +8,7 @@ // } // // Abstract class below should not get highlighted // abstract class Foo { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -22,7 +22,7 @@ // } // // Abstract class below should not get highlighted // abstract class Foo { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -36,7 +36,7 @@ // } // // Abstract class below should not get highlighted // abstract class Foo { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -50,7 +50,7 @@ // } // // Abstract class below should not get highlighted // abstract class Foo { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -64,4 +64,4 @@ // } // // Abstract class below should not get highlighted // abstract class Foo { -// // --- (line: 9) skipped --- \ No newline at end of file +// --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract02.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract02.baseline.jsonc index 08faaf8825..176fb79f21 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract02.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract02.baseline.jsonc @@ -32,7 +32,7 @@ // } // // abstract cannot appear here, won't get highlighted // let c = abstract class Foo { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -45,4 +45,4 @@ // } // // abstract cannot appear here, won't get highlighted // let c = abstract class Foo { -// // --- (line: 8) skipped --- \ No newline at end of file +// --- (line: 8) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract03.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract03.baseline.jsonc index 10c2925c08..6a48f78847 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract03.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAbstract03.baseline.jsonc @@ -6,7 +6,7 @@ // } // abstract class B {} // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -18,7 +18,7 @@ // } // abstract class B {} // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAsyncAwait.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAsyncAwait.baseline.jsonc index 4934e838b1..2ed5c5bdd3 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAsyncAwait.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesAsyncAwait.baseline.jsonc @@ -12,7 +12,7 @@ // await 300; // } // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -30,7 +30,7 @@ // await 300; // } // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -48,7 +48,7 @@ // await 300; // } // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -66,7 +66,7 @@ // await 300; // } // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -84,4 +84,4 @@ // await 300; // } // } -// // --- (line: 13) skipped --- \ No newline at end of file +// --- (line: 13) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionConstructor.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionConstructor.baseline.jsonc index 7b5c4730a1..4a4dcf7c02 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionConstructor.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionConstructor.baseline.jsonc @@ -8,7 +8,7 @@ // } // } // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -22,7 +22,7 @@ // } // } // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -36,7 +36,7 @@ // } // } // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -50,4 +50,4 @@ // } // } // -// // --- (line: 9) skipped --- \ No newline at end of file +// --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPrivate.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPrivate.baseline.jsonc index 923a851a0c..94ad7b2590 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPrivate.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPrivate.baseline.jsonc @@ -11,7 +11,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -28,7 +28,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -45,7 +45,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -62,7 +62,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -79,4 +79,4 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- \ No newline at end of file +// --- (line: 12) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPublic.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPublic.baseline.jsonc index 44ea7bf572..814ea2fb87 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPublic.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionPublic.baseline.jsonc @@ -11,7 +11,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -28,7 +28,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -45,7 +45,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -62,7 +62,7 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -79,4 +79,4 @@ // } // // let B = class D { -// // --- (line: 12) skipped --- \ No newline at end of file +// --- (line: 12) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStatic.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStatic.baseline.jsonc index 6e552e9a49..57a86ba00f 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStatic.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStatic.baseline.jsonc @@ -12,7 +12,7 @@ // } // // let B = class D { -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -30,7 +30,7 @@ // } // // let B = class D { -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -48,7 +48,7 @@ // } // // let B = class D { -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -66,4 +66,4 @@ // } // // let B = class D { -// // --- (line: 13) skipped --- \ No newline at end of file +// --- (line: 13) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStaticThis.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStaticThis.baseline.jsonc index d5d4cce282..dbe4c8051d 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStaticThis.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionStaticThis.baseline.jsonc @@ -13,7 +13,7 @@ // } // } // function inside() { -// // --- (line: 39) skipped --- +// --- (line: 39) skipped --- @@ -32,7 +32,7 @@ // } // } // function inside() { -// // --- (line: 39) skipped --- +// --- (line: 39) skipped --- @@ -51,7 +51,7 @@ // } // } // function inside() { -// // --- (line: 39) skipped --- +// --- (line: 39) skipped --- @@ -70,7 +70,7 @@ // } // } // function inside() { -// // --- (line: 39) skipped --- +// --- (line: 39) skipped --- @@ -89,4 +89,4 @@ // } // } // function inside() { -// // --- (line: 39) skipped --- \ No newline at end of file +// --- (line: 39) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionThis.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionThis.baseline.jsonc index 0b18513ac4..ffaa22c5c0 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionThis.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesClassExpressionThis.baseline.jsonc @@ -28,7 +28,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -62,7 +62,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -96,7 +96,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -130,7 +130,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -164,7 +164,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -198,7 +198,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -232,7 +232,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -266,7 +266,7 @@ // } // // static bar() { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -300,4 +300,4 @@ // } // // static bar() { -// // --- (line: 29) skipped --- \ No newline at end of file +// --- (line: 29) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesConstructor.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesConstructor.baseline.jsonc index 9a0d835004..af2e5170e9 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesConstructor.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesConstructor.baseline.jsonc @@ -8,7 +8,7 @@ // if (a === undefined && r.length === 0) { // return; // } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -22,7 +22,7 @@ // if (a === undefined && r.length === 0) { // return; // } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -36,7 +36,7 @@ // if (a === undefined && r.length === 0) { // return; // } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -50,4 +50,4 @@ // if (a === undefined && r.length === 0) { // return; // } -// // --- (line: 9) skipped --- \ No newline at end of file +// --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare1.baseline.jsonc index dcb84d6fb3..6d13696877 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare1.baseline.jsonc @@ -8,7 +8,7 @@ // interface I2 { // } // } -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- // --- (line: 45) skipped --- // } @@ -31,7 +31,7 @@ // interface I2 { // } // } -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- // --- (line: 45) skipped --- // } @@ -54,7 +54,7 @@ // interface I2 { // } // } -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- // --- (line: 45) skipped --- // } diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare2.baseline.jsonc index e8aad750bf..aa39315422 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare2.baseline.jsonc @@ -8,4 +8,4 @@ // // export class C2 { // public pub1; -// // --- (line: 41) skipped --- \ No newline at end of file +// --- (line: 41) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare3.baseline.jsonc index fe4b8851c5..e93934e75e 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesDeclare3.baseline.jsonc @@ -5,7 +5,7 @@ // // module m { // export class C1 { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 53) skipped --- // declare function foo(): string; @@ -24,7 +24,7 @@ // // module m { // export class C1 { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 53) skipped --- // declare function foo(): string; @@ -43,7 +43,7 @@ // // module m { // export class C1 { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 53) skipped --- // declare function foo(): string; @@ -62,7 +62,7 @@ // // module m { // export class C1 { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 53) skipped --- // declare function foo(): string; diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport1.baseline.jsonc index bc27b75743..c2215000ab 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport1.baseline.jsonc @@ -5,7 +5,7 @@ // public pub1; // public pub2; // private priv1; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 24) skipped --- // protected static statProt; @@ -23,7 +23,7 @@ // declare var foo; // // export class C2 { -// // --- (line: 40) skipped --- +// --- (line: 40) skipped --- // --- (line: 46) skipped --- // } @@ -42,7 +42,7 @@ // public pub1; // public pub2; // private priv1; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 24) skipped --- // protected static statProt; @@ -60,7 +60,7 @@ // declare var foo; // // export class C2 { -// // --- (line: 40) skipped --- +// --- (line: 40) skipped --- // --- (line: 46) skipped --- // } @@ -79,7 +79,7 @@ // public pub1; // public pub2; // private priv1; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 24) skipped --- // protected static statProt; @@ -97,7 +97,7 @@ // declare var foo; // // export class C2 { -// // --- (line: 40) skipped --- +// --- (line: 40) skipped --- // --- (line: 46) skipped --- // } @@ -116,7 +116,7 @@ // public pub1; // public pub2; // private priv1; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 24) skipped --- // protected static statProt; @@ -134,7 +134,7 @@ // declare var foo; // // export class C2 { -// // --- (line: 40) skipped --- +// --- (line: 40) skipped --- // --- (line: 46) skipped --- // } @@ -153,7 +153,7 @@ // public pub1; // public pub2; // private priv1; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 24) skipped --- // protected static statProt; @@ -171,7 +171,7 @@ // declare var foo; // // export class C2 { -// // --- (line: 40) skipped --- +// --- (line: 40) skipped --- // --- (line: 46) skipped --- // } diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport2.baseline.jsonc index a870127ec7..8002597a24 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport2.baseline.jsonc @@ -8,4 +8,4 @@ // public pub1; // private priv1; // protected prot1; -// // --- (line: 43) skipped --- \ No newline at end of file +// --- (line: 43) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport3.baseline.jsonc index f403d6f737..cb1dbbda9c 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesExport3.baseline.jsonc @@ -5,7 +5,7 @@ // // module m { // export class C1 { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 53) skipped --- // declare function foo(): string; @@ -24,7 +24,7 @@ // // module m { // export class C1 { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 53) skipped --- // declare function foo(): string; @@ -43,7 +43,7 @@ // // module m { // export class C1 { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 53) skipped --- // declare function foo(): string; diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse.baseline.jsonc index f8dcb8e4ee..27751a8374 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse.baseline.jsonc @@ -4,7 +4,7 @@ // if (false) { // } // else { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 10) skipped --- // var x = undefined; @@ -27,7 +27,7 @@ // if (false) { // } // else { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 10) skipped --- // var x = undefined; @@ -50,7 +50,7 @@ // if (false) { // } // else { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 10) skipped --- // var x = undefined; @@ -73,7 +73,7 @@ // if (false) { // } // else { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 10) skipped --- // var x = undefined; @@ -96,7 +96,7 @@ // if (false) { // } // else { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 10) skipped --- // var x = undefined; @@ -119,7 +119,7 @@ // if (false) { // } // else { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 10) skipped --- // var x = undefined; @@ -142,7 +142,7 @@ // if (false) { // } // else { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 10) skipped --- // var x = undefined; diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse2.baseline.jsonc index 1bfc0a9616..3445107591 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse2.baseline.jsonc @@ -7,7 +7,7 @@ // } // if (true) { // } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -20,4 +20,4 @@ // } // if (true) { // } -// // --- (line: 8) skipped --- \ No newline at end of file +// --- (line: 8) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse3.baseline.jsonc index b519b05023..3a5564b744 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesIfElse3.baseline.jsonc @@ -11,7 +11,7 @@ // if (false) // if (true) // var x = undefined; -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -28,4 +28,4 @@ // if (false) // if (true) // var x = undefined; -// // --- (line: 12) skipped --- \ No newline at end of file +// --- (line: 12) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue.baseline.jsonc index 18d8c97660..e83646bb59 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue.baseline.jsonc @@ -13,7 +13,7 @@ // // break; // continue; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -32,7 +32,7 @@ // // break; // continue; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -51,7 +51,7 @@ // // break; // continue; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -70,7 +70,7 @@ // // break; // continue; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -89,7 +89,7 @@ // // break; // continue; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -108,7 +108,7 @@ // // break; // continue; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -127,4 +127,4 @@ // // break; // continue; -// // --- (line: 14) skipped --- \ No newline at end of file +// --- (line: 14) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue2.baseline.jsonc index 2449c57254..286cb6d4b5 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue2.baseline.jsonc @@ -15,7 +15,7 @@ // // function foo() { // label3: while (true) { -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- @@ -36,7 +36,7 @@ // // function foo() { // label3: while (true) { -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- @@ -57,7 +57,7 @@ // // function foo() { // label3: while (true) { -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- @@ -78,7 +78,7 @@ // // function foo() { // label3: while (true) { -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- @@ -99,4 +99,4 @@ // // function foo() { // label3: while (true) { -// // --- (line: 19) skipped --- \ No newline at end of file +// --- (line: 19) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue3.baseline.jsonc index dda8ff0265..3fbfb484fd 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue3.baseline.jsonc @@ -12,7 +12,7 @@ // // // these cross function boundaries // break label1; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 32) skipped --- // break label4; @@ -23,7 +23,7 @@ // // switch (10) { // case 1: -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- @@ -41,7 +41,7 @@ // // // these cross function boundaries // break label1; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 32) skipped --- // break label4; @@ -52,7 +52,7 @@ // // switch (10) { // case 1: -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- @@ -70,7 +70,7 @@ // // // these cross function boundaries // break label1; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 32) skipped --- // break label4; @@ -81,7 +81,7 @@ // // switch (10) { // case 1: -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- @@ -99,7 +99,7 @@ // // // these cross function boundaries // break label1; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 32) skipped --- // break label4; @@ -110,7 +110,7 @@ // // switch (10) { // case 1: -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- @@ -128,7 +128,7 @@ // // // these cross function boundaries // break label1; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 32) skipped --- // break label4; @@ -139,7 +139,7 @@ // // switch (10) { // case 1: -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- @@ -157,7 +157,7 @@ // // // these cross function boundaries // break label1; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 32) skipped --- // break label4; @@ -168,7 +168,7 @@ // // switch (10) { // case 1: -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- @@ -186,7 +186,7 @@ // // // these cross function boundaries // break label1; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 32) skipped --- // break label4; @@ -197,4 +197,4 @@ // // switch (10) { // case 1: -// // --- (line: 41) skipped --- \ No newline at end of file +// --- (line: 41) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue4.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue4.baseline.jsonc index 36319f7756..2c11a4aad0 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue4.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesLoopBreakContinue4.baseline.jsonc @@ -32,7 +32,7 @@ // } // } // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- @@ -70,7 +70,7 @@ // } // } // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- @@ -108,7 +108,7 @@ // } // } // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- @@ -146,7 +146,7 @@ // } // } // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- @@ -184,7 +184,7 @@ // } // } // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- @@ -222,7 +222,7 @@ // } // } // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- @@ -260,7 +260,7 @@ // } // } // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- @@ -298,4 +298,4 @@ // } // } // } -// // --- (line: 58) skipped --- \ No newline at end of file +// --- (line: 58) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesModifiersNegatives1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesModifiersNegatives1.baseline.jsonc index 6bdbd543a4..125a07de88 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesModifiersNegatives1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesModifiersNegatives1.baseline.jsonc @@ -8,7 +8,7 @@ // // constructor(export conFoo, // declare conBar, -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -22,7 +22,7 @@ // // constructor(export conFoo, // declare conBar, -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -36,7 +36,7 @@ // // constructor(export conFoo, // declare conBar, -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -50,7 +50,7 @@ // // constructor(export conFoo, // declare conBar, -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -64,7 +64,7 @@ // // constructor(export conFoo, // declare conBar, -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -78,7 +78,7 @@ // // constructor(export conFoo, // declare conBar, -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -101,7 +101,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -124,7 +124,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -147,7 +147,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -170,7 +170,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -193,7 +193,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -216,7 +216,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -233,7 +233,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -250,7 +250,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -273,7 +273,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -296,7 +296,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -313,7 +313,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -336,7 +336,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -359,7 +359,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -382,7 +382,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -399,7 +399,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -422,7 +422,7 @@ // } // } // -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -436,7 +436,7 @@ // public b; // private c; // protected d; -// // --- (line: 23) skipped --- +// --- (line: 23) skipped --- @@ -450,7 +450,7 @@ // private c; // protected d; // static public private protected e; -// // --- (line: 24) skipped --- +// --- (line: 24) skipped --- @@ -464,7 +464,7 @@ // protected d; // static public private protected e; // public static protected private f; -// // --- (line: 25) skipped --- +// --- (line: 25) skipped --- @@ -478,7 +478,7 @@ // static public private protected e; // public static protected private f; // protected static public g; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- @@ -492,7 +492,7 @@ // public static protected private f; // protected static public g; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -506,7 +506,7 @@ // public static protected private f; // protected static public g; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -520,7 +520,7 @@ // public static protected private f; // protected static public g; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -534,7 +534,7 @@ // public static protected private f; // protected static public g; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -548,7 +548,7 @@ // protected static public g; // } // static a; -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -562,7 +562,7 @@ // protected static public g; // } // static a; -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -576,7 +576,7 @@ // protected static public g; // } // static a; -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -590,7 +590,7 @@ // protected static public g; // } // static a; -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -604,7 +604,7 @@ // } // static a; // public b; -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -618,7 +618,7 @@ // } // static a; // public b; -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -632,7 +632,7 @@ // } // static a; // public b; -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -646,7 +646,7 @@ // public b; // private c; // protected d; -// // --- (line: 31) skipped --- +// --- (line: 31) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate1.baseline.jsonc index 3617a1c9ba..4ac62facb2 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate1.baseline.jsonc @@ -27,7 +27,7 @@ // protected static statProt; // } // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -60,7 +60,7 @@ // protected static statProt; // } // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -93,7 +93,7 @@ // protected static statProt; // } // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -126,7 +126,7 @@ // protected static statProt; // } // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -159,7 +159,7 @@ // protected static statProt; // } // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -192,4 +192,4 @@ // protected static statProt; // } // -// // --- (line: 28) skipped --- \ No newline at end of file +// --- (line: 28) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate2.baseline.jsonc index f60965a862..cb5ec4f321 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPrivate2.baseline.jsonc @@ -11,7 +11,7 @@ // public = private = protected; // } // } -// // --- (line: 48) skipped --- +// --- (line: 48) skipped --- @@ -28,4 +28,4 @@ // public = private = protected; // } // } -// // --- (line: 48) skipped --- \ No newline at end of file +// --- (line: 48) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected1.baseline.jsonc index 8490faf1d0..110aa435ee 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected1.baseline.jsonc @@ -15,7 +15,7 @@ // this.public = 10; // this.private = 10; // this.protected = 10; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 21) skipped --- // @@ -25,7 +25,7 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -46,7 +46,7 @@ // this.public = 10; // this.private = 10; // this.protected = 10; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 21) skipped --- // @@ -56,7 +56,7 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -77,7 +77,7 @@ // this.public = 10; // this.private = 10; // this.protected = 10; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 21) skipped --- // @@ -87,7 +87,7 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -108,7 +108,7 @@ // this.public = 10; // this.private = 10; // this.protected = 10; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 21) skipped --- // @@ -118,7 +118,7 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -139,7 +139,7 @@ // this.public = 10; // this.private = 10; // this.protected = 10; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 21) skipped --- // @@ -149,7 +149,7 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -170,7 +170,7 @@ // this.public = 10; // this.private = 10; // this.protected = 10; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 21) skipped --- // @@ -180,4 +180,4 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- \ No newline at end of file +// --- (line: 29) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected2.baseline.jsonc index 70dd56fa8a..bb0a6e58b0 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesProtected2.baseline.jsonc @@ -10,7 +10,7 @@ // public = private = protected; // } // } -// // --- (line: 48) skipped --- +// --- (line: 48) skipped --- @@ -26,7 +26,7 @@ // public = private = protected; // } // } -// // --- (line: 48) skipped --- +// --- (line: 48) skipped --- @@ -42,4 +42,4 @@ // public = private = protected; // } // } -// // --- (line: 48) skipped --- \ No newline at end of file +// --- (line: 48) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic1.baseline.jsonc index f0245158d1..f4d29bb6ee 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic1.baseline.jsonc @@ -26,7 +26,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -58,7 +58,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -90,7 +90,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -122,7 +122,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -154,7 +154,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -186,7 +186,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -218,7 +218,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -250,7 +250,7 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- @@ -282,4 +282,4 @@ // private static statPriv; // protected static statProt; // } -// // --- (line: 27) skipped --- \ No newline at end of file +// --- (line: 27) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic2.baseline.jsonc index 368425ff54..4341efbd50 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesPublic2.baseline.jsonc @@ -12,7 +12,7 @@ // public = private = protected; // } // } -// // --- (line: 48) skipped --- +// --- (line: 48) skipped --- @@ -30,4 +30,4 @@ // public = private = protected; // } // } -// // --- (line: 48) skipped --- \ No newline at end of file +// --- (line: 48) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReadonly3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReadonly3.baseline.jsonc index aa353f0e86..6d1400c143 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReadonly3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReadonly3.baseline.jsonc @@ -31,4 +31,4 @@ // constructor(readonly prop2: string) { // class D { // readonly prop: string = ""; -// // --- (line: 6) skipped --- \ No newline at end of file +// --- (line: 6) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn.baseline.jsonc index e1e04ea209..0150bdb2f9 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn.baseline.jsonc @@ -6,7 +6,7 @@ // return; // return; // return; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- // --- (line: 12) skipped --- // @@ -26,7 +26,7 @@ // return; // return; // return; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- // --- (line: 12) skipped --- // @@ -46,7 +46,7 @@ // return; // return; // return; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- // --- (line: 12) skipped --- // diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn2.baseline.jsonc index 6a7fa7bfdd..d6d3046f3f 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesReturn2.baseline.jsonc @@ -12,7 +12,7 @@ // } // })() || true; // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -30,7 +30,7 @@ // } // })() || true; // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -48,7 +48,7 @@ // } // })() || true; // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -66,4 +66,4 @@ // } // })() || true; // } -// // --- (line: 13) skipped --- \ No newline at end of file +// --- (line: 13) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet.baseline.jsonc index f8e611291b..ef1ff56046 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet.baseline.jsonc @@ -8,7 +8,7 @@ // return undefined; // } // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -22,4 +22,4 @@ // return undefined; // } // -// // --- (line: 9) skipped --- \ No newline at end of file +// --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet2.baseline.jsonc index 99684a437f..4573eeed5a 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSetAndGet2.baseline.jsonc @@ -11,7 +11,7 @@ // return undefined; // } // -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- @@ -28,4 +28,4 @@ // return undefined; // } // -// // --- (line: 16) skipped --- \ No newline at end of file +// --- (line: 16) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesStatic1.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesStatic1.baseline.jsonc index 669bccd3c2..3670237fd2 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesStatic1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesStatic1.baseline.jsonc @@ -10,7 +10,7 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -26,7 +26,7 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -42,4 +42,4 @@ // } // // export interface I1 { -// // --- (line: 29) skipped --- \ No newline at end of file +// --- (line: 29) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper.baseline.jsonc index a89f8f9810..27e5817c58 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper.baseline.jsonc @@ -28,7 +28,7 @@ // } // } // -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -62,7 +62,7 @@ // } // } // -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -96,7 +96,7 @@ // } // } // -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -130,7 +130,7 @@ // } // } // -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -164,7 +164,7 @@ // } // } // -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -198,7 +198,7 @@ // } // } // -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -232,4 +232,4 @@ // } // } // -// // --- (line: 35) skipped --- \ No newline at end of file +// --- (line: 35) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper2.baseline.jsonc index 199a3e90e5..6e1cfb87a4 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper2.baseline.jsonc @@ -15,7 +15,7 @@ // } // // // Are not actually 'super' keywords. -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- @@ -36,7 +36,7 @@ // } // // // Are not actually 'super' keywords. -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- @@ -57,4 +57,4 @@ // } // // // Are not actually 'super' keywords. -// // --- (line: 47) skipped --- \ No newline at end of file +// --- (line: 47) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper3.baseline.jsonc index 527a1d8087..79efd5ce98 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuper3.baseline.jsonc @@ -9,7 +9,7 @@ // }, // c: function () { // return super.a(); -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -24,7 +24,7 @@ // }, // c: function () { // return super.a(); -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuperNegatives.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuperNegatives.baseline.jsonc index c1812ce56f..0610a1cd99 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuperNegatives.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSuperNegatives.baseline.jsonc @@ -4,7 +4,7 @@ // super; // } // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -15,7 +15,7 @@ // } // // module M { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -30,7 +30,7 @@ // function f(x = super) { // super; // } -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -44,7 +44,7 @@ // super; // } // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -58,4 +58,4 @@ // } // // class A { -// // --- (line: 12) skipped --- \ No newline at end of file +// --- (line: 12) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSwitchCaseDefault2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSwitchCaseDefault2.baseline.jsonc index 2f45fd199e..9de4835b56 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSwitchCaseDefault2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesSwitchCaseDefault2.baseline.jsonc @@ -14,7 +14,7 @@ // } // case 0xBEEF: // default: -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -34,7 +34,7 @@ // } // case 0xBEEF: // default: -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -54,7 +54,7 @@ // } // case 0xBEEF: // default: -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -74,7 +74,7 @@ // } // case 0xBEEF: // default: -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -94,7 +94,7 @@ // } // case 0xBEEF: // default: -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -114,4 +114,4 @@ // } // case 0xBEEF: // default: -// // --- (line: 15) skipped --- \ No newline at end of file +// --- (line: 15) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis.baseline.jsonc index 2418ead776..eae6c00b15 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis.baseline.jsonc @@ -5,7 +5,7 @@ // // function f() { // this; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -16,4 +16,4 @@ // // function f() { // this; -// // --- (line: 6) skipped --- \ No newline at end of file +// --- (line: 6) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis2.baseline.jsonc index 76d9c05eb4..6736e22a6c 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis2.baseline.jsonc @@ -16,7 +16,7 @@ // } // } // function inside() { -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -38,7 +38,7 @@ // } // } // function inside() { -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -60,7 +60,7 @@ // } // } // function inside() { -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -82,7 +82,7 @@ // } // } // function inside() { -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -104,7 +104,7 @@ // } // } // function inside() { -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -126,4 +126,4 @@ // } // } // function inside() { -// // --- (line: 17) skipped --- \ No newline at end of file +// --- (line: 17) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis3.baseline.jsonc index 8beeaf0051..92bab07661 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis3.baseline.jsonc @@ -11,7 +11,7 @@ // } // } // -// // --- (line: 24) skipped --- +// --- (line: 24) skipped --- @@ -28,4 +28,4 @@ // } // } // -// // --- (line: 24) skipped --- \ No newline at end of file +// --- (line: 24) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis4.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis4.baseline.jsonc index 71a4333334..46336ec112 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis4.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis4.baseline.jsonc @@ -19,7 +19,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -37,7 +37,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -62,7 +62,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -80,7 +80,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -105,7 +105,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -123,7 +123,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -148,7 +148,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -166,7 +166,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -191,7 +191,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -209,7 +209,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -234,7 +234,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -252,7 +252,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -277,7 +277,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -295,7 +295,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -320,7 +320,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -338,7 +338,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -363,7 +363,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -381,7 +381,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -406,7 +406,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -424,7 +424,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -449,7 +449,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -467,7 +467,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -492,7 +492,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -510,7 +510,7 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- +// --- (line: 82) skipped --- @@ -535,7 +535,7 @@ // } // } // function inside() { -// // --- (line: 62) skipped --- +// --- (line: 62) skipped --- // --- (line: 66) skipped --- // } @@ -553,4 +553,4 @@ // } // } // function inside() { -// // --- (line: 82) skipped --- \ No newline at end of file +// --- (line: 82) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis5.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis5.baseline.jsonc index 12d80173a7..122dbc0190 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis5.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThis5.baseline.jsonc @@ -19,7 +19,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -37,7 +37,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -62,7 +62,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -80,7 +80,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -105,7 +105,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -123,7 +123,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -148,7 +148,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -166,7 +166,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -191,7 +191,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -209,7 +209,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -234,7 +234,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -252,7 +252,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -277,7 +277,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -295,7 +295,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -320,7 +320,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -338,7 +338,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -363,7 +363,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -381,7 +381,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -406,7 +406,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -424,7 +424,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -449,7 +449,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -467,7 +467,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -492,7 +492,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -510,7 +510,7 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- +// --- (line: 124) skipped --- @@ -535,7 +535,7 @@ // } // } // function inside() { -// // --- (line: 104) skipped --- +// --- (line: 104) skipped --- // --- (line: 108) skipped --- // } @@ -553,4 +553,4 @@ // } // } // function inside() { -// // --- (line: 124) skipped --- \ No newline at end of file +// --- (line: 124) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow.baseline.jsonc index b554a64c91..0e343b0c7e 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow.baseline.jsonc @@ -21,7 +21,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; @@ -61,7 +61,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; @@ -101,7 +101,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; @@ -141,7 +141,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; @@ -181,7 +181,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; @@ -221,7 +221,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; @@ -261,7 +261,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; @@ -301,7 +301,7 @@ // return; // return; // return; -// // --- (line: 26) skipped --- +// --- (line: 26) skipped --- // --- (line: 30) skipped --- // })() || true; diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow2.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow2.baseline.jsonc index db010fa874..4571f7ebd7 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow2.baseline.jsonc @@ -9,4 +9,4 @@ // } // catch (x) { // return 100; -// // --- (line: 10) skipped --- \ No newline at end of file +// --- (line: 10) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow3.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow3.baseline.jsonc index 86ca2055fc..7928edb6ae 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow3.baseline.jsonc @@ -15,7 +15,7 @@ // } // } // catch (x) { -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- @@ -36,4 +36,4 @@ // } // } // catch (x) { -// // --- (line: 16) skipped --- \ No newline at end of file +// --- (line: 16) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow4.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow4.baseline.jsonc index ffe619c700..d8d97ef913 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow4.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow4.baseline.jsonc @@ -15,7 +15,7 @@ // })() || true; // } // -// // --- (line: 34) skipped --- +// --- (line: 34) skipped --- @@ -36,7 +36,7 @@ // })() || true; // } // -// // --- (line: 34) skipped --- +// --- (line: 34) skipped --- @@ -57,7 +57,7 @@ // })() || true; // } // -// // --- (line: 34) skipped --- +// --- (line: 34) skipped --- @@ -78,7 +78,7 @@ // })() || true; // } // -// // --- (line: 34) skipped --- +// --- (line: 34) skipped --- @@ -99,4 +99,4 @@ // })() || true; // } // -// // --- (line: 34) skipped --- \ No newline at end of file +// --- (line: 34) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow8.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow8.baseline.jsonc index 64af032ca9..f92bdeb5c5 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow8.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesThrow8.baseline.jsonc @@ -8,4 +8,4 @@ // } // catch (x) { // throw 10; -// // --- (line: 9) skipped --- \ No newline at end of file +// --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesYield.baseline.jsonc b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesYield.baseline.jsonc index 721e41c40c..791f95c434 100644 --- a/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesYield.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/documentHighlights/getOccurrencesYield.baseline.jsonc @@ -6,7 +6,7 @@ // class Foo { // *memberFunction() { // return yield 1; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -18,7 +18,7 @@ // class Foo { // *memberFunction() { // return yield 1; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -30,4 +30,4 @@ // class Foo { // *memberFunction() { // return yield 1; -// // --- (line: 7) skipped --- \ No newline at end of file +// --- (line: 7) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag1.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag1.baseline.jsonc index 8db971a964..dfe204ec44 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag1.baseline.jsonc @@ -16,7 +16,7 @@ // */ // p() { } // /** -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -28,7 +28,7 @@ // static s() { } // /** // * {@link m} -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- // --- (line: 13) skipped --- // */ @@ -45,7 +45,7 @@ // */ // q() { } // /** -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- @@ -58,7 +58,7 @@ // /** // * {@link m} // * @see {m} -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- // --- (line: 24) skipped --- // */ @@ -71,7 +71,7 @@ // */ // r() { } // } -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -93,7 +93,7 @@ // */ // c() // /** -// // --- (line: 49) skipped --- +// --- (line: 49) skipped --- @@ -107,7 +107,7 @@ // /** // * {@link a} // * @see {a} -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 45) skipped --- // */ @@ -120,7 +120,7 @@ // */ // d() // } -// // --- (line: 56) skipped --- +// --- (line: 56) skipped --- @@ -175,7 +175,7 @@ // */ // r() { } // } -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -205,4 +205,4 @@ // */ // d() // } -// // --- (line: 56) skipped --- \ No newline at end of file +// --- (line: 56) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag2.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag2.baseline.jsonc index 164c894c14..eba7e0c70e 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag2.baseline.jsonc @@ -13,7 +13,7 @@ // * @see {Consider#This#show} // * {@link Consider.This.show} // * @see {NPR.Consider#This#show} -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -116,7 +116,7 @@ // export class Consider { // This = class { // show() { } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 9) skipped --- // * {@link Consider#m} diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag3.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag3.baseline.jsonc index 37e0a9e126..bff0714030 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesLinkTag3.baseline.jsonc @@ -13,7 +13,7 @@ // * {@linkcode Consider#This#show} // * {@linkplain Consider.This.show} // * {@linkcode NPR.Consider#This#show} -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -116,7 +116,7 @@ // export class Consider { // This = class { // show() { } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 9) skipped --- // * {@linkplain Consider#m} diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesOfConstructor.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesOfConstructor.baseline.jsonc index fc41d645a1..90ec6e075a 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesOfConstructor.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllReferencesOfConstructor.baseline.jsonc @@ -25,7 +25,7 @@ // super.method(); // } // method() { super(); } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- // === /d.ts === // import * as a from "./a"; @@ -61,7 +61,7 @@ // super.method(); // } // method() { super(); } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- // === /d.ts === // import * as a from "./a"; @@ -97,7 +97,7 @@ // super.method(); // } // method() { super(); } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- // === /d.ts === // import * as a from "./a"; diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultExport09.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultExport09.baseline.jsonc index 5a1931dc42..0e2d010d7d 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultExport09.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultExport09.baseline.jsonc @@ -4,7 +4,7 @@ // import aDefault from "./a.js" // import * as b from "./b.js" // import bDefault from "./b.js" -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -15,7 +15,7 @@ // import * as b from "./b.js" // import bDefault from "./b.js" // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -27,7 +27,7 @@ // import bDefault from "./b.js" // // import * as c from "./c" -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultKeyword.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultKeyword.baseline.jsonc index c4f30551ac..a6f9679c53 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultKeyword.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForDefaultKeyword.baseline.jsonc @@ -4,7 +4,7 @@ // // const default = 1; // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -16,7 +16,7 @@ // // function default() {} // -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -30,7 +30,7 @@ // // class default {} // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstanceMethodInheritance.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstanceMethodInheritance.baseline.jsonc index 872fa19d94..503fb4d860 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstanceMethodInheritance.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstanceMethodInheritance.baseline.jsonc @@ -35,7 +35,7 @@ // } // // class Z extends Y{ -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- // --- (line: 16) skipped --- // x.foo(); @@ -56,7 +56,7 @@ // foo(): void{} // } // -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 17) skipped --- // y.foo(); diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstancePropertyInheritance.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstancePropertyInheritance.baseline.jsonc index ef28551cd5..c50b79024f 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstancePropertyInheritance.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStaticInstancePropertyInheritance.baseline.jsonc @@ -35,7 +35,7 @@ // } // // class Z extends Y{ -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- // --- (line: 16) skipped --- // x.foo; @@ -56,7 +56,7 @@ // foo:any // } // -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 17) skipped --- // y.foo; @@ -181,7 +181,7 @@ // } // // class Z extends Y{ -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- // --- (line: 16) skipped --- // x.foo; @@ -202,7 +202,7 @@ // foo:any // } // -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 17) skipped --- // y.foo; diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStringLiteral.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStringLiteral.baseline.jsonc index 25e25f788a..de1934c34b 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStringLiteral.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsForStringLiteral.baseline.jsonc @@ -5,4 +5,4 @@ // } // /** // * @type {{ property: "foo"}} -// // --- (line: 6) skipped --- \ No newline at end of file +// --- (line: 6) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties4.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties4.baseline.jsonc index 7574b69cc6..d3cda0e851 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties4.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties4.baseline.jsonc @@ -57,7 +57,7 @@ // } // // interface D extends C { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties5.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties5.baseline.jsonc index 0e213dc93d..a31259b4a4 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties5.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsInheritedProperties5.baseline.jsonc @@ -5,7 +5,7 @@ // prop1: number; // } // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -17,7 +17,7 @@ // } // // class D extends C { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsIsDefinition.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsIsDefinition.baseline.jsonc index b1d0fc3619..3b50a12409 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsIsDefinition.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsIsDefinition.baseline.jsonc @@ -14,7 +14,7 @@ // // export const bar = 123; // console.log({ bar }); -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -34,7 +34,7 @@ // // export const bar = 123; // console.log({ bar }); -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -49,7 +49,7 @@ // // interface IFoo { // foo(): void; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag2.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag2.baseline.jsonc index 44d151af3a..ab47e0389f 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag2.baseline.jsonc @@ -4,7 +4,7 @@ // constructor() { // this.id_ = Math.random(); // } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // === /player.js === // import [|Component|] from './component.js'; diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag3.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag3.baseline.jsonc index fe331dd151..0059cc284c 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsJsDocImportTag3.baseline.jsonc @@ -4,7 +4,7 @@ // constructor() { // this.id_ = Math.random(); // } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // === /player.js === // import { [|Component|] } from './component.js'; diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsNonexistentPropertyNoCrash1.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsNonexistentPropertyNoCrash1.baseline.jsonc index effe8abd26..2738cf3b9d 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsNonexistentPropertyNoCrash1.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsNonexistentPropertyNoCrash1.baseline.jsonc @@ -8,4 +8,4 @@ // return name[1]; // } // }, -// // --- (line: 18) skipped --- \ No newline at end of file +// --- (line: 18) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsOnDefinition.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsOnDefinition.baseline.jsonc index 1ce9c15254..6fa2ed3597 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsOnDefinition.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsOnDefinition.baseline.jsonc @@ -8,7 +8,7 @@ // return this; // } // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- // === /findAllRefsOnDefinition.ts === // import Second = require("./findAllRefsOnDefinition-import"); @@ -29,7 +29,7 @@ // return this; // } // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- // === /findAllRefsOnDefinition.ts === // import Second = require("./findAllRefsOnDefinition-import"); @@ -50,7 +50,7 @@ // return this; // } // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- // === /findAllRefsOnDefinition.ts === // import Second = require("./findAllRefsOnDefinition-import"); diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsParameterPropertyDeclaration_inheritance.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsParameterPropertyDeclaration_inheritance.baseline.jsonc index 035894ef83..598c9cedf2 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsParameterPropertyDeclaration_inheritance.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsParameterPropertyDeclaration_inheritance.baseline.jsonc @@ -21,7 +21,7 @@ // } // } // class D extends C { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameAccessors.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameAccessors.baseline.jsonc index 590bc48285..573570f52e 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameAccessors.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameAccessors.baseline.jsonc @@ -8,7 +8,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -22,7 +22,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -36,7 +36,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -50,7 +50,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -64,7 +64,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameMethods.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameMethods.baseline.jsonc index b115a88835..bd67fc9c94 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameMethods.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameMethods.baseline.jsonc @@ -7,7 +7,7 @@ // } // } // class D extends C { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -20,7 +20,7 @@ // } // } // class D extends C { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameProperties.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameProperties.baseline.jsonc index cbc205cc2d..b7538252a0 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameProperties.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsPrivateNameProperties.baseline.jsonc @@ -8,7 +8,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -22,7 +22,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -36,7 +36,7 @@ // } // } // class D extends C { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsThisKeyword.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsThisKeyword.baseline.jsonc index f8e13748e3..1d014bde5c 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsThisKeyword.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsThisKeyword.baseline.jsonc @@ -4,7 +4,7 @@ // function f(this) { // return this; // function g(this) { return this; } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -16,7 +16,7 @@ // function g(this) { return this; } // } // class C { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -28,7 +28,7 @@ // function g(this) { return this; } // } // class C { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -41,7 +41,7 @@ // } // class C { // static x() { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -54,7 +54,7 @@ // } // class C { // static x() { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -71,7 +71,7 @@ // } // constructor() { // this; -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -88,7 +88,7 @@ // } // constructor() { // this; -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsUnionProperty.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsUnionProperty.baseline.jsonc index 7eb77a494a..31924ba41a 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsUnionProperty.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsUnionProperty.baseline.jsonc @@ -117,7 +117,7 @@ // }; // declare const t: T; // if (t.type === "a") { -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -132,7 +132,7 @@ // }; // declare const t: T; // if (t.type === "a") { -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -147,4 +147,4 @@ // }; // declare const t: T; // if (t.type === "a") { -// // --- (line: 10) skipped --- \ No newline at end of file +// --- (line: 10) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment2.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment2.baseline.jsonc index 4aa27d262c..2efe5a6b7f 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment2.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment2.baseline.jsonc @@ -4,7 +4,7 @@ // // module M { export var dx; } // module M { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findReferencesDefinitionDisplayParts.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findReferencesDefinitionDisplayParts.baseline.jsonc index 01bbfdfb3a..98e4beca3a 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findReferencesDefinitionDisplayParts.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findReferencesDefinitionDisplayParts.baseline.jsonc @@ -4,7 +4,7 @@ // someFunction() { this; } // } // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -15,7 +15,7 @@ // } // // type Options = "option 1" | "option 2"; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossGlobalProjects.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossGlobalProjects.baseline.jsonc index d97e39c38f..9ae99a8d0c 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossGlobalProjects.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossGlobalProjects.baseline.jsonc @@ -5,7 +5,7 @@ // FB(); // } // } -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -51,7 +51,7 @@ // } // // interface I { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -90,7 +90,7 @@ // } // // interface I { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc index bab15b51fa..4c80f3759e 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/isDefinitionAcrossModuleProjects.baseline.jsonc @@ -9,7 +9,7 @@ // } // } // -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- // --- (line: 13) skipped --- // } @@ -84,7 +84,7 @@ // } // } // -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- // --- (line: 13) skipped --- // } @@ -155,7 +155,7 @@ // } // // export interface I { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -194,7 +194,7 @@ // } // // export interface I { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/localGetReferences.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/localGetReferences.baseline.jsonc index 11a750c0a7..31f1861768 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/localGetReferences.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/localGetReferences.baseline.jsonc @@ -16,7 +16,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -26,7 +26,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -36,7 +36,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -46,7 +46,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -66,7 +66,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -88,7 +88,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -98,7 +98,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -108,7 +108,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -118,7 +118,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -138,7 +138,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -160,7 +160,7 @@ // // References to a class parameter. // this.clsParam++; // modTest.modVar++; -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- // --- (line: 24) skipped --- // var fnVar = 1; @@ -170,7 +170,7 @@ // globalVar++; // modTest.modVar++; // fnVar++; -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- // --- (line: 39) skipped --- // @@ -180,7 +180,7 @@ // modVar++; // // class testCls { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- // --- (line: 51) skipped --- // @@ -190,7 +190,7 @@ // modVar++; // } // -// // --- (line: 59) skipped --- +// --- (line: 59) skipped --- // --- (line: 70) skipped --- // foo(globalVar); @@ -200,7 +200,7 @@ // modTest.modVar++; // globalVar = globalVar + globalVar; // -// // --- (line: 78) skipped --- +// --- (line: 78) skipped --- @@ -222,7 +222,7 @@ // // References to a class parameter. // this.clsParam++; // modTest.modVar++; -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- // --- (line: 24) skipped --- // var fnVar = 1; @@ -232,7 +232,7 @@ // globalVar++; // modTest.modVar++; // fnVar++; -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- // --- (line: 39) skipped --- // @@ -242,7 +242,7 @@ // modVar++; // // class testCls { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- // --- (line: 51) skipped --- // @@ -252,7 +252,7 @@ // modVar++; // } // -// // --- (line: 59) skipped --- +// --- (line: 59) skipped --- // --- (line: 70) skipped --- // foo(globalVar); @@ -262,7 +262,7 @@ // modTest.modVar++; // globalVar = globalVar + globalVar; // -// // --- (line: 78) skipped --- +// --- (line: 78) skipped --- @@ -281,7 +281,7 @@ // fooCls.clsSVar++; // // References to a class parameter. // this.clsParam++; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -301,7 +301,7 @@ // modTest.modVar++; // } // } -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -321,7 +321,7 @@ // modTest.modVar++; // } // } -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -343,7 +343,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -353,7 +353,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -363,7 +363,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -373,7 +373,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -393,7 +393,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -412,7 +412,7 @@ // fooCls.clsSVar++; // // References to a class parameter. // this.clsParam++; -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- @@ -434,7 +434,7 @@ // // References to a class parameter. // this.clsParam++; // modTest.modVar++; -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- // --- (line: 24) skipped --- // var fnVar = 1; @@ -444,7 +444,7 @@ // globalVar++; // modTest.modVar++; // fnVar++; -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- // --- (line: 39) skipped --- // @@ -454,7 +454,7 @@ // modVar++; // // class testCls { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- // --- (line: 51) skipped --- // @@ -464,7 +464,7 @@ // modVar++; // } // -// // --- (line: 59) skipped --- +// --- (line: 59) skipped --- // --- (line: 70) skipped --- // foo(globalVar); @@ -474,7 +474,7 @@ // modTest.modVar++; // globalVar = globalVar + globalVar; // -// // --- (line: 78) skipped --- +// --- (line: 78) skipped --- @@ -494,7 +494,7 @@ // modTest.modVar++; // } // } -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -508,7 +508,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -531,7 +531,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -551,7 +551,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -565,7 +565,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -588,7 +588,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -608,7 +608,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -622,7 +622,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 30) skipped --- // fnVar++; @@ -632,7 +632,7 @@ // } // // module modTest { -// // --- (line: 38) skipped --- +// --- (line: 38) skipped --- @@ -652,7 +652,7 @@ // // //Return // return x++; -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -672,7 +672,7 @@ // // //Return // return x++; -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -694,7 +694,7 @@ // // References to a class parameter. // this.clsParam++; // modTest.modVar++; -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- // --- (line: 24) skipped --- // var fnVar = 1; @@ -704,7 +704,7 @@ // globalVar++; // modTest.modVar++; // fnVar++; -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- // --- (line: 39) skipped --- // @@ -714,7 +714,7 @@ // modVar++; // // class testCls { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- // --- (line: 51) skipped --- // @@ -724,7 +724,7 @@ // modVar++; // } // -// // --- (line: 59) skipped --- +// --- (line: 59) skipped --- // --- (line: 70) skipped --- // foo(globalVar); @@ -734,7 +734,7 @@ // modTest.modVar++; // globalVar = globalVar + globalVar; // -// // --- (line: 78) skipped --- +// --- (line: 78) skipped --- @@ -756,7 +756,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -766,7 +766,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -776,7 +776,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -786,7 +786,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -806,7 +806,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -826,7 +826,7 @@ // // //Return // return x++; -// // --- (line: 35) skipped --- +// --- (line: 35) skipped --- @@ -840,7 +840,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 30) skipped --- // fnVar++; @@ -850,7 +850,7 @@ // } // // module modTest { -// // --- (line: 38) skipped --- +// --- (line: 38) skipped --- @@ -872,7 +872,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -882,7 +882,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -892,7 +892,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -902,7 +902,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -922,7 +922,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -944,7 +944,7 @@ // // References to a class parameter. // this.clsParam++; // modTest.modVar++; -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- // --- (line: 24) skipped --- // var fnVar = 1; @@ -954,7 +954,7 @@ // globalVar++; // modTest.modVar++; // fnVar++; -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- // --- (line: 39) skipped --- // @@ -964,7 +964,7 @@ // modVar++; // // class testCls { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- // --- (line: 51) skipped --- // @@ -974,7 +974,7 @@ // modVar++; // } // -// // --- (line: 59) skipped --- +// --- (line: 59) skipped --- // --- (line: 70) skipped --- // foo(globalVar); @@ -984,7 +984,7 @@ // modTest.modVar++; // globalVar = globalVar + globalVar; // -// // --- (line: 78) skipped --- +// --- (line: 78) skipped --- @@ -998,7 +998,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -1021,7 +1021,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -1041,7 +1041,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -1055,7 +1055,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -1078,7 +1078,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -1098,7 +1098,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -1120,7 +1120,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -1130,7 +1130,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -1140,7 +1140,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -1150,7 +1150,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -1170,7 +1170,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -1192,7 +1192,7 @@ // // References to a class parameter. // this.clsParam++; // modTest.modVar++; -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- // --- (line: 24) skipped --- // var fnVar = 1; @@ -1202,7 +1202,7 @@ // globalVar++; // modTest.modVar++; // fnVar++; -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- // --- (line: 39) skipped --- // @@ -1212,7 +1212,7 @@ // modVar++; // // class testCls { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- // --- (line: 51) skipped --- // @@ -1222,7 +1222,7 @@ // modVar++; // } // -// // --- (line: 59) skipped --- +// --- (line: 59) skipped --- // --- (line: 70) skipped --- // foo(globalVar); @@ -1232,7 +1232,7 @@ // modTest.modVar++; // globalVar = globalVar + globalVar; // -// // --- (line: 78) skipped --- +// --- (line: 78) skipped --- @@ -1246,7 +1246,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -1269,7 +1269,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -1289,7 +1289,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -1311,7 +1311,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -1321,7 +1321,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -1331,7 +1331,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -1341,7 +1341,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -1361,7 +1361,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -1375,7 +1375,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -1398,7 +1398,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -1418,7 +1418,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -1440,7 +1440,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -1450,7 +1450,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -1460,7 +1460,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -1470,7 +1470,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -1490,7 +1490,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -1512,7 +1512,7 @@ // // References to a class parameter. // this.clsParam++; // modTest.modVar++; -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- // --- (line: 24) skipped --- // var fnVar = 1; @@ -1522,7 +1522,7 @@ // globalVar++; // modTest.modVar++; // fnVar++; -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- // --- (line: 39) skipped --- // @@ -1532,7 +1532,7 @@ // modVar++; // // class testCls { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- // --- (line: 51) skipped --- // @@ -1542,7 +1542,7 @@ // modVar++; // } // -// // --- (line: 59) skipped --- +// --- (line: 59) skipped --- // --- (line: 70) skipped --- // foo(globalVar); @@ -1552,7 +1552,7 @@ // modTest.modVar++; // globalVar = globalVar + globalVar; // -// // --- (line: 78) skipped --- +// --- (line: 78) skipped --- @@ -1574,7 +1574,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -1584,7 +1584,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -1594,7 +1594,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -1604,7 +1604,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -1624,7 +1624,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -1646,7 +1646,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -1656,7 +1656,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -1666,7 +1666,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -1676,7 +1676,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -1696,7 +1696,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -1718,7 +1718,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -1728,7 +1728,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -1738,7 +1738,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -1748,7 +1748,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -1768,7 +1768,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -1790,7 +1790,7 @@ // this.clsVar++; // fooCls.clsSVar++; // // References to a class parameter. -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- // --- (line: 25) skipped --- // @@ -1800,7 +1800,7 @@ // modTest.modVar++; // fnVar++; // -// // --- (line: 33) skipped --- +// --- (line: 33) skipped --- // --- (line: 38) skipped --- // export var modVar:number; @@ -1810,7 +1810,7 @@ // fooCls.clsSVar++; // modVar++; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- // --- (line: 50) skipped --- // static boo = foo; @@ -1820,7 +1820,7 @@ // fooCls.clsSVar++; // modVar++; // } -// // --- (line: 58) skipped --- +// --- (line: 58) skipped --- // --- (line: 65) skipped --- // @@ -1840,7 +1840,7 @@ // // References to illegal assignment. // foo = foo + 1; // err = err++; -// // --- (line: 83) skipped --- +// --- (line: 83) skipped --- @@ -1854,7 +1854,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -1877,7 +1877,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -1897,7 +1897,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -1911,7 +1911,7 @@ // // References to a variable declared in a function. // var fnVar = 1; // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 43) skipped --- // modVar++; @@ -1934,7 +1934,7 @@ // } // } // -// // --- (line: 64) skipped --- +// --- (line: 64) skipped --- // --- (line: 67) skipped --- // // References to a class argument. @@ -1954,7 +1954,7 @@ // err = err++; // // //Shadowed fn Parameter -// // --- (line: 85) skipped --- +// --- (line: 85) skipped --- @@ -1971,7 +1971,7 @@ // } // // //Remotes -// // --- (line: 92) skipped --- +// --- (line: 92) skipped --- @@ -1988,7 +1988,7 @@ // } // // //Remotes -// // --- (line: 92) skipped --- +// --- (line: 92) skipped --- @@ -2005,7 +2005,7 @@ // } // // //Remotes -// // --- (line: 92) skipped --- +// --- (line: 92) skipped --- @@ -2049,7 +2049,7 @@ // // References to a variable declared in global. // var globalVar: number = 2; // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -2063,7 +2063,7 @@ // // //Shadowed fn Parameter // function shdw(globalVar: number) { -// // --- (line: 86) skipped --- +// --- (line: 86) skipped --- @@ -2077,4 +2077,4 @@ // //Shadowed fn Parameter // function shdw(globalVar: number) { // //Increments -// // --- (line: 87) skipped --- \ No newline at end of file +// --- (line: 87) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referenceInParameterPropertyDeclaration.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referenceInParameterPropertyDeclaration.baseline.jsonc index 4cc9699bb0..5c15f865f3 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referenceInParameterPropertyDeclaration.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referenceInParameterPropertyDeclaration.baseline.jsonc @@ -10,7 +10,7 @@ // // let localPublic = publicParam; // this.publicParam += " Hello!"; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForAmbients.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForAmbients.baseline.jsonc index 9643fbc873..752d9fb046 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForAmbients.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForAmbients.baseline.jsonc @@ -9,7 +9,7 @@ // var f2: typeof foo.f; // } // -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -24,7 +24,7 @@ // var f2: typeof foo.f; // } // -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -40,7 +40,7 @@ // } // // declare module "baz" { -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -56,7 +56,7 @@ // } // // declare module "baz" { -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -143,7 +143,7 @@ // var f2: typeof foo.f; // } // -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -177,7 +177,7 @@ // } // // declare module "baz" { -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForClassLocal.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForClassLocal.baseline.jsonc index 1644f2ca65..9fdcbf41b4 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForClassLocal.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForClassLocal.baseline.jsonc @@ -14,7 +14,7 @@ // } // // public bar2() { -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -34,7 +34,7 @@ // } // // public bar2() { -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -54,7 +54,7 @@ // } // // public bar2() { -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -74,4 +74,4 @@ // } // // public bar2() { -// // --- (line: 15) skipped --- \ No newline at end of file +// --- (line: 15) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForDeclarationKeywords.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForDeclarationKeywords.baseline.jsonc index f690bc1ada..a69a231138 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForDeclarationKeywords.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForDeclarationKeywords.baseline.jsonc @@ -6,7 +6,7 @@ // get e() { return 1; } // set e(v) {} // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -22,7 +22,7 @@ // type T = { } // enum E { } // namespace N { } -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -34,7 +34,7 @@ // get e() { return 1; } // set e(v) {} // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -59,7 +59,7 @@ // } // interface I1 extends Base { } // type T = { } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -73,7 +73,7 @@ // } // interface I1 extends Base { } // type T = { } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -87,7 +87,7 @@ // type T = { } // enum E { } // namespace N { } -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -103,7 +103,7 @@ // type T = { } // enum E { } // namespace N { } -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -127,7 +127,7 @@ // enum E { } // namespace N { } // module M { } -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -141,7 +141,7 @@ // namespace N { } // module M { } // function fn() {} -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -155,7 +155,7 @@ // module M { } // function fn() {} // var x; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -169,7 +169,7 @@ // function fn() {} // var x; // let y; -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -183,7 +183,7 @@ // var x; // let y; // const z = 1; -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- @@ -197,7 +197,7 @@ // let y; // const z = 1; // interface Implemented2 {} -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForExportedValues.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForExportedValues.baseline.jsonc index 10c12df9c3..09b2502240 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForExportedValues.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForExportedValues.baseline.jsonc @@ -5,7 +5,7 @@ // // // local use // var x = variable; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForExpressionKeywords.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForExpressionKeywords.baseline.jsonc index c7d0181ab8..9e86a17195 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForExpressionKeywords.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForExpressionKeywords.baseline.jsonc @@ -162,4 +162,4 @@ // async function* f() { // yield C; // await C; -// // --- (line: 11) skipped --- \ No newline at end of file +// --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForGlobalsInExternalModule.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForGlobalsInExternalModule.baseline.jsonc index f676331fc7..3c0c64d7a8 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForGlobalsInExternalModule.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForGlobalsInExternalModule.baseline.jsonc @@ -5,7 +5,7 @@ // // class topLevelClass { } // var c = new topLevelClass(); -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -16,7 +16,7 @@ // // class topLevelClass { } // var c = new topLevelClass(); -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -27,7 +27,7 @@ // // class topLevelClass { } // var c = new topLevelClass(); -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -41,7 +41,7 @@ // // interface topLevelInterface { } // var i: topLevelInterface; -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -55,7 +55,7 @@ // // interface topLevelInterface { } // var i: topLevelInterface; -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -69,7 +69,7 @@ // // interface topLevelInterface { } // var i: topLevelInterface; -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -84,7 +84,7 @@ // // module topLevelModule { // export var x; -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -99,7 +99,7 @@ // // module topLevelModule { // export var x; -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -114,7 +114,7 @@ // // module topLevelModule { // export var x; -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForInheritedProperties9.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForInheritedProperties9.baseline.jsonc index fa5cd78b48..d35f31e906 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForInheritedProperties9.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForInheritedProperties9.baseline.jsonc @@ -5,7 +5,7 @@ // } // // class C extends D { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForLabel5.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForLabel5.baseline.jsonc index 4b0e54b03e..b495a48255 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForLabel5.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForLabel5.baseline.jsonc @@ -19,7 +19,7 @@ // function blah() { // label: while (true) { // if (false) break label; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations.baseline.jsonc index d6508f7d33..f1cc995e1e 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations.baseline.jsonc @@ -4,7 +4,7 @@ // } // // module Foo { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 8) skipped --- // } @@ -21,7 +21,7 @@ // } // // module Foo { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 8) skipped --- // } @@ -122,7 +122,7 @@ // } // // module Foo { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 8) skipped --- // } diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations3.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations3.baseline.jsonc index 1fc1969780..a49154eaa7 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations3.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations3.baseline.jsonc @@ -26,7 +26,7 @@ // static staticMethod() { } // method() { } // } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 8) skipped --- // } diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations7.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations7.baseline.jsonc index 5f4172f80a..b42cbb5171 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations7.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForMergedDeclarations7.baseline.jsonc @@ -6,7 +6,7 @@ // export module Bar { export interface Baz { } } // export function Bar() { } // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForModifiers.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForModifiers.baseline.jsonc index 564c05add5..2ff0b6c60c 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForModifiers.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForModifiers.baseline.jsonc @@ -4,7 +4,7 @@ // static a; // readonly b; // public c; -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -14,7 +14,7 @@ // static a; // readonly b; // public c; -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -25,7 +25,7 @@ // readonly b; // public c; // protected d; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -37,7 +37,7 @@ // public c; // protected d; // private e; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -50,7 +50,7 @@ // protected d; // private e; // } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -64,7 +64,7 @@ // private e; // } // const enum E { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForNoContext.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForNoContext.baseline.jsonc index e164a992da..751b4c9e69 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForNoContext.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForNoContext.baseline.jsonc @@ -7,7 +7,7 @@ // // //Increments // modVar++; -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -21,7 +21,7 @@ // } // // function testFn(){ -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForOverrides.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForOverrides.baseline.jsonc index 8925d5d0da..4a9fdc9a98 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForOverrides.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForOverrides.baseline.jsonc @@ -11,7 +11,7 @@ // } // } // } -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- // --- (line: 58) skipped --- // @@ -21,7 +21,7 @@ // // var y: SimpleInterfaceTest.IBar = null; // y.ifoo(); -// // --- (line: 66) skipped --- +// --- (line: 66) skipped --- @@ -38,7 +38,7 @@ // } // } // -// // --- (line: 22) skipped --- +// --- (line: 22) skipped --- // --- (line: 61) skipped --- // x.foo(); @@ -48,7 +48,7 @@ // // var w: SimpleClassInterfaceTest.Bar = null; // w.icfoo(); -// // --- (line: 69) skipped --- +// --- (line: 69) skipped --- @@ -65,7 +65,7 @@ // } // } // } -// // --- (line: 31) skipped --- +// --- (line: 31) skipped --- // --- (line: 64) skipped --- // y.ifoo(); @@ -75,7 +75,7 @@ // // var z = new Test.BarBlah(); // z.field = ""; -// // --- (line: 72) skipped --- +// --- (line: 72) skipped --- @@ -111,7 +111,7 @@ // } // } // -// // --- (line: 60) skipped --- +// --- (line: 60) skipped --- // --- (line: 67) skipped --- // w.icfoo(); @@ -134,7 +134,7 @@ // } // // export interface IBlah extends IBase { -// // --- (line: 39) skipped --- +// --- (line: 39) skipped --- // --- (line: 43) skipped --- // } @@ -149,7 +149,7 @@ // } // // export class BarBlah extends Bar { -// // --- (line: 56) skipped --- +// --- (line: 56) skipped --- // --- (line: 68) skipped --- // diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForStatementKeywords.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForStatementKeywords.baseline.jsonc index 9bf5d0afe3..bc4a02ea61 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForStatementKeywords.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForStatementKeywords.baseline.jsonc @@ -5,7 +5,7 @@ // namespace N { } // import N2 = N; // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -16,7 +16,7 @@ // namespace N { } // import N2 = N; // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -29,7 +29,7 @@ // // // import ... from ... // import type B from "./b"; -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -46,7 +46,7 @@ // import type * as C from "./c"; // import type { D } from "./d"; // import type { e1, e2 as e3 } from "./e"; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -63,7 +63,7 @@ // import type * as C from "./c"; // import type { D } from "./d"; // import type { e1, e2 as e3 } from "./e"; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -77,7 +77,7 @@ // import type * as C from "./c"; // import type { D } from "./d"; // import type { e1, e2 as e3 } from "./e"; -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -91,7 +91,7 @@ // import type { D } from "./d"; // import type { e1, e2 as e3 } from "./e"; // -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -105,7 +105,7 @@ // import type { D } from "./d"; // import type { e1, e2 as e3 } from "./e"; // -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -119,7 +119,7 @@ // import type { D } from "./d"; // import type { e1, e2 as e3 } from "./e"; // -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -133,7 +133,7 @@ // import type { D } from "./d"; // import type { e1, e2 as e3 } from "./e"; // -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -150,7 +150,7 @@ // import type { e1, e2 as e3 } from "./e"; // // // import "module" -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -167,7 +167,7 @@ // import type { e1, e2 as e3 } from "./e"; // // // import "module" -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -181,7 +181,7 @@ // import type { e1, e2 as e3 } from "./e"; // // // import "module" -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -195,7 +195,7 @@ // // // import "module" // import "./f"; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -209,7 +209,7 @@ // // // import "module" // import "./f"; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -223,7 +223,7 @@ // // // import "module" // import "./f"; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -237,7 +237,7 @@ // // // import "module" // import "./f"; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -251,7 +251,7 @@ // // // export ... from ... // export type * from "./g"; -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -265,7 +265,7 @@ // export type * as H from "./h"; // export type { I } from "./i"; // export type { j1, j2 as j3 } from "./j"; -// // --- (line: 20) skipped --- +// --- (line: 20) skipped --- @@ -279,7 +279,7 @@ // export type * as H from "./h"; // export type { I } from "./i"; // export type { j1, j2 as j3 } from "./j"; -// // --- (line: 20) skipped --- +// --- (line: 20) skipped --- @@ -293,7 +293,7 @@ // export type * as H from "./h"; // export type { I } from "./i"; // export type { j1, j2 as j3 } from "./j"; -// // --- (line: 20) skipped --- +// --- (line: 20) skipped --- @@ -307,7 +307,7 @@ // export type { I } from "./i"; // export type { j1, j2 as j3 } from "./j"; // type Z1 = 1; -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -321,7 +321,7 @@ // export type { I } from "./i"; // export type { j1, j2 as j3 } from "./j"; // type Z1 = 1; -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -335,7 +335,7 @@ // export type { I } from "./i"; // export type { j1, j2 as j3 } from "./j"; // type Z1 = 1; -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -349,7 +349,7 @@ // export type { I } from "./i"; // export type { j1, j2 as j3 } from "./j"; // type Z1 = 1; -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -363,7 +363,7 @@ // export type { j1, j2 as j3 } from "./j"; // type Z1 = 1; // export type { Z1 }; -// // --- (line: 22) skipped --- +// --- (line: 22) skipped --- @@ -377,7 +377,7 @@ // export type { j1, j2 as j3 } from "./j"; // type Z1 = 1; // export type { Z1 }; -// // --- (line: 22) skipped --- +// --- (line: 22) skipped --- @@ -391,7 +391,7 @@ // export type { j1, j2 as j3 } from "./j"; // type Z1 = 1; // export type { Z1 }; -// // --- (line: 22) skipped --- +// --- (line: 22) skipped --- diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForStaticsAndMembersWithSameNames.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForStaticsAndMembersWithSameNames.baseline.jsonc index 98a98b58e6..eb76a14cc8 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForStaticsAndMembersWithSameNames.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForStaticsAndMembersWithSameNames.baseline.jsonc @@ -7,7 +7,7 @@ // static bar: Foo; // // public foo(): void { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- // --- (line: 14) skipped --- // // instance function @@ -17,7 +17,7 @@ // // // static function // MixedStaticsClassTest.Foo.foo(); -// // --- (line: 22) skipped --- +// --- (line: 22) skipped --- @@ -31,7 +31,7 @@ // // public foo(): void { // } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- // --- (line: 18) skipped --- // @@ -53,7 +53,7 @@ // // public foo(): void { // } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- // --- (line: 18) skipped --- // @@ -85,7 +85,7 @@ // x.bar; // // // static function -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -109,7 +109,7 @@ // x.bar; // // // static function -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -123,7 +123,7 @@ // } // } // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- // --- (line: 17) skipped --- // x.bar; @@ -146,7 +146,7 @@ // } // } // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- // --- (line: 17) skipped --- // x.bar; @@ -179,7 +179,7 @@ // x.bar; // // // static function -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -192,7 +192,7 @@ // static bar: Foo; // // public foo(): void { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- // --- (line: 14) skipped --- // // instance function @@ -202,7 +202,7 @@ // // // static function // MixedStaticsClassTest.Foo.foo(); -// // --- (line: 22) skipped --- +// --- (line: 22) skipped --- @@ -216,7 +216,7 @@ // } // } // } -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- // --- (line: 17) skipped --- // x.bar; @@ -239,7 +239,7 @@ // // public foo(): void { // } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- // --- (line: 18) skipped --- // diff --git a/testdata/baselines/reference/fourslash/findAllReferences/referencesForUnionProperties.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/referencesForUnionProperties.baseline.jsonc index 5a0d495a21..cbf119c6ba 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/referencesForUnionProperties.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/referencesForUnionProperties.baseline.jsonc @@ -5,7 +5,7 @@ // } // // interface Base { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 17) skipped --- // diff --git a/testdata/baselines/reference/fourslash/findAllReferences/remoteGetReferences.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/remoteGetReferences.baseline.jsonc index 3858ed4b25..52195127bf 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/remoteGetReferences.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/remoteGetReferences.baseline.jsonc @@ -15,7 +15,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -33,7 +33,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -43,7 +43,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -53,7 +53,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -63,7 +63,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -84,7 +84,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -102,7 +102,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -112,7 +112,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -122,7 +122,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -132,7 +132,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -155,7 +155,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -171,7 +171,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -181,7 +181,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -191,7 +191,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -201,7 +201,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -224,7 +224,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -240,7 +240,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -250,7 +250,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -260,7 +260,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -270,7 +270,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -291,7 +291,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -309,7 +309,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -319,7 +319,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -329,7 +329,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -339,7 +339,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -353,7 +353,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -371,7 +371,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -381,7 +381,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -391,7 +391,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -401,7 +401,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -424,7 +424,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -440,7 +440,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -450,7 +450,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -460,7 +460,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -470,7 +470,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -493,7 +493,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -509,7 +509,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -519,7 +519,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -529,7 +529,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -539,7 +539,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -562,7 +562,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -578,7 +578,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -588,7 +588,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -598,7 +598,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -608,7 +608,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -631,7 +631,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -647,7 +647,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -657,7 +657,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -667,7 +667,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -677,7 +677,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -700,7 +700,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // /*FIND ALL REFS*/var [|remoteglobalVar|]: number = 2; @@ -716,7 +716,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -726,7 +726,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -736,7 +736,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -746,7 +746,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -769,7 +769,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var /*FIND ALL REFS*/[|remoteglobalVar|]: number = 2; @@ -785,7 +785,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -795,7 +795,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -805,7 +805,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -815,7 +815,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -836,7 +836,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -854,7 +854,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -864,7 +864,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -874,7 +874,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -884,7 +884,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -905,7 +905,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -923,7 +923,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -933,7 +933,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -943,7 +943,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -953,7 +953,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -973,7 +973,7 @@ // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; // remotemodTest.remotemodVar++; -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -987,7 +987,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1005,7 +1005,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1015,7 +1015,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1025,7 +1025,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1035,7 +1035,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1049,7 +1049,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1067,7 +1067,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1077,7 +1077,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1087,7 +1087,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1097,7 +1097,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1120,7 +1120,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -1136,7 +1136,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -1146,7 +1146,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -1156,7 +1156,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -1166,7 +1166,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -1186,7 +1186,7 @@ // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; // remotemodTest.remotemodVar++; -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -1207,7 +1207,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1225,7 +1225,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1235,7 +1235,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1245,7 +1245,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1255,7 +1255,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1269,7 +1269,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1287,7 +1287,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1297,7 +1297,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1307,7 +1307,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1317,7 +1317,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1338,7 +1338,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1356,7 +1356,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1366,7 +1366,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1376,7 +1376,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1386,7 +1386,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1400,7 +1400,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1418,7 +1418,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1428,7 +1428,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1438,7 +1438,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1448,7 +1448,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1471,7 +1471,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -1487,7 +1487,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -1497,7 +1497,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -1507,7 +1507,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -1517,7 +1517,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -1540,7 +1540,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -1556,7 +1556,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -1566,7 +1566,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -1576,7 +1576,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -1586,7 +1586,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -1607,7 +1607,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1625,7 +1625,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1635,7 +1635,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1645,7 +1645,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1655,7 +1655,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1669,7 +1669,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1687,7 +1687,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1697,7 +1697,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1707,7 +1707,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1717,7 +1717,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1740,7 +1740,7 @@ // // //Find References misses method param // var -// // --- (line: 102) skipped --- +// --- (line: 102) skipped --- // === /remoteGetReferences_2.ts === // var [|remoteglobalVar|]: number = 2; @@ -1756,7 +1756,7 @@ // this.remoteclsVar++; // remotefooCls.remoteclsSVar++; // this.remoteclsParam++; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- // --- (line: 20) skipped --- // @@ -1766,7 +1766,7 @@ // remotemodTest.remotemodVar++; // remotefnVar++; // -// // --- (line: 28) skipped --- +// --- (line: 28) skipped --- // --- (line: 33) skipped --- // export var remotemodVar: number; @@ -1776,7 +1776,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- // --- (line: 45) skipped --- // static remoteboo = remotefoo; @@ -1786,7 +1786,7 @@ // remotefooCls.remoteclsSVar++; // remotemodVar++; // } -// // --- (line: 53) skipped --- +// --- (line: 53) skipped --- @@ -1807,7 +1807,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1825,7 +1825,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1835,7 +1835,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1845,7 +1845,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1855,7 +1855,7 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- +// --- (line: 54) skipped --- @@ -1869,7 +1869,7 @@ // remotemodTest.remotemodVar++; // remoteglobalVar = remoteglobalVar + remoteglobalVar; // -// // --- (line: 97) skipped --- +// --- (line: 97) skipped --- // === /remoteGetReferences_2.ts === // var remoteglobalVar: number = 2; @@ -1887,7 +1887,7 @@ // this.remoteclsParam++; // remotemodTest.remotemodVar++; // } -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- // --- (line: 19) skipped --- // var remotefnVar = 1; @@ -1897,7 +1897,7 @@ // remoteglobalVar++; // remotemodTest.remotemodVar++; // remotefnVar++; -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- // --- (line: 34) skipped --- // @@ -1907,7 +1907,7 @@ // remotemodVar++; // // class remotetestCls { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- // --- (line: 46) skipped --- // @@ -1917,4 +1917,4 @@ // remotemodVar++; // } // -// // --- (line: 54) skipped --- \ No newline at end of file +// --- (line: 54) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/fourslash/findAllReferences/renameImportOfExportEquals.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/renameImportOfExportEquals.baseline.jsonc index 28ba24f606..683be0695a 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/renameImportOfExportEquals.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/renameImportOfExportEquals.baseline.jsonc @@ -11,7 +11,7 @@ // export { N }; // Renaming N here would rename // } // declare module "b" { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -28,7 +28,7 @@ // export { N }; // Renaming N here would rename // } // declare module "b" { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -58,7 +58,7 @@ // } // declare module "mod" { // export = N; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 9) skipped --- // } diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc index f96fbc5b1d..fcd406390c 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc @@ -4,4 +4,4 @@ // static s() { // this; // } -// // --- (line: 5) skipped --- \ No newline at end of file +// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc.diff index 29eec4cdc0..0f95315a07 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/findAllRefsClassWithStaticThisAccess.baseline.jsonc.diff @@ -11,4 +11,4 @@ -// class Inner { x = this; } -// } -// } -+// // --- (line: 5) skipped --- \ No newline at end of file ++// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc index aae6d891cd..054862bb38 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc @@ -4,7 +4,7 @@ // // function f({ // lvl1 = external, -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff index f92508151d..d15fbd63f5 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff @@ -15,7 +15,7 @@ -// oldName: newName = [|externalRENAME|] -// } = obj; +// lvl1 = external, -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc index 65750b7846..0cb69da0ce 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc @@ -5,4 +5,4 @@ // // This is a reference to Bar in a comment. // "this is a reference to Bar in a string"; // `Foo Bar Baz.`; -// // --- (line: 6) skipped --- \ No newline at end of file +// --- (line: 6) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc.diff index 77124b4370..4b0a648224 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameCommentsAndStrings4.baseline.jsonc.diff @@ -17,4 +17,4 @@ +// // This is a reference to Bar in a comment. +// "this is a reference to Bar in a string"; +// `Foo Bar Baz.`; -+// // --- (line: 6) skipped --- \ No newline at end of file ++// --- (line: 6) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc index 5e291fb2fb..d8e27af222 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc @@ -303,7 +303,7 @@ // "prop2"() { } // }; // -// // --- (line: 31) skipped --- +// --- (line: 31) skipped --- @@ -317,7 +317,7 @@ // "prop2": function () { } // }; // -// // --- (line: 36) skipped --- +// --- (line: 36) skipped --- @@ -331,7 +331,7 @@ // ["prop2"]: function () { } // }; // -// // --- (line: 41) skipped --- +// --- (line: 41) skipped --- @@ -345,7 +345,7 @@ // ["prop2"]() { } // }; // -// // --- (line: 46) skipped --- +// --- (line: 46) skipped --- @@ -359,7 +359,7 @@ // get ["prop2"]() { return () => { }; } // }; // -// // --- (line: 51) skipped --- +// --- (line: 51) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc.diff index 8269b1954c..fcb859890e 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties.baseline.jsonc.diff @@ -359,7 +359,7 @@ +// "prop2"() { } +// }; +// -+// // --- (line: 31) skipped --- ++// --- (line: 31) skipped --- + + + @@ -373,7 +373,7 @@ +// "prop2": function () { } +// }; +// -+// // --- (line: 36) skipped --- ++// --- (line: 36) skipped --- + + + @@ -387,7 +387,7 @@ +// ["prop2"]: function () { } +// }; +// -+// // --- (line: 41) skipped --- ++// --- (line: 41) skipped --- + + + @@ -401,7 +401,7 @@ +// ["prop2"]() { } +// }; +// -+// // --- (line: 46) skipped --- ++// --- (line: 46) skipped --- + + + @@ -415,7 +415,7 @@ +// get ["prop2"]() { return () => { }; } +// }; +// -+// // --- (line: 51) skipped --- ++// --- (line: 51) skipped --- + + + diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc index 2701f8b18c..ce9ada88af 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc @@ -303,7 +303,7 @@ // }; // // var o6: I = { -// // --- (line: 32) skipped --- +// --- (line: 32) skipped --- @@ -317,7 +317,7 @@ // }; // // var o7: I = { -// // --- (line: 37) skipped --- +// --- (line: 37) skipped --- @@ -331,7 +331,7 @@ // }; // // var o8: I = { -// // --- (line: 42) skipped --- +// --- (line: 42) skipped --- @@ -345,7 +345,7 @@ // }; // // var o9: I = { -// // --- (line: 47) skipped --- +// --- (line: 47) skipped --- @@ -359,7 +359,7 @@ // }; // // var o10: I = { -// // --- (line: 52) skipped --- +// --- (line: 52) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc.diff index 9cb5b9653a..e200c17231 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameContextuallyTypedProperties2.baseline.jsonc.diff @@ -360,7 +360,7 @@ +// }; +// +// var o6: I = { -+// // --- (line: 32) skipped --- ++// --- (line: 32) skipped --- + + + @@ -374,7 +374,7 @@ +// }; +// +// var o7: I = { -+// // --- (line: 37) skipped --- ++// --- (line: 37) skipped --- + + + @@ -388,7 +388,7 @@ +// }; +// +// var o8: I = { -+// // --- (line: 42) skipped --- ++// --- (line: 42) skipped --- + + + @@ -402,7 +402,7 @@ +// }; +// +// var o9: I = { -+// // --- (line: 47) skipped --- ++// --- (line: 47) skipped --- + + + @@ -416,7 +416,7 @@ +// }; +// +// var o10: I = { -+// // --- (line: 52) skipped --- ++// --- (line: 52) skipped --- + + + diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc index f0155261f0..f21fe2b771 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc @@ -6,7 +6,7 @@ // get e() { return 1; } // set e(v) {} // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -18,7 +18,7 @@ // get e() { return 1; } // set e(v) {} // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -30,7 +30,7 @@ // get e() { return 1; } // set e(v) {} // } -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -43,7 +43,7 @@ // set e(v) {} // } // interface I1 extends Base { } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -57,7 +57,7 @@ // } // interface I1 extends Base { } // type T = { } -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -71,7 +71,7 @@ // type T = { } // enum E { } // namespace N { } -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -85,7 +85,7 @@ // type T = { } // enum E { } // namespace N { } -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -99,7 +99,7 @@ // enum E { } // namespace N { } // module M { } -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -113,7 +113,7 @@ // namespace N { } // module M { } // function fn() {} -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc.diff index 994bb4b0aa..c4f98a4d4e 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDeclarationKeywords.baseline.jsonc.diff @@ -94,15 +94,11 @@ -// set e(v) {} -// } -// interface I1 /*RENAME*/extends [|BaseRENAME|] { } --// type T = { } --// enum E { } --// namespace N { } --// --- (line: 11) skipped --- +// /*RENAME*/class C1 extends Base implements Implemented1 { +// get e() { return 1; } +// set e(v) {} +// } -+// // --- (line: 7) skipped --- ++// --- (line: 7) skipped --- + + + @@ -114,7 +110,7 @@ +// get e() { return 1; } +// set e(v) {} +// } -+// // --- (line: 7) skipped --- ++// --- (line: 7) skipped --- + + + @@ -126,7 +122,7 @@ +// get e() { return 1; } +// set e(v) {} +// } -+// // --- (line: 7) skipped --- ++// --- (line: 7) skipped --- + + + @@ -139,7 +135,7 @@ +// set e(v) {} +// } +// interface I1 extends Base { } -+// // --- (line: 8) skipped --- ++// --- (line: 8) skipped --- + + + @@ -153,7 +149,7 @@ +// } +// interface I1 extends Base { } +// type T = { } -+// // --- (line: 9) skipped --- ++// --- (line: 9) skipped --- + + + @@ -167,7 +163,7 @@ +// type T = { } +// enum E { } +// namespace N { } -+// // --- (line: 11) skipped --- ++// --- (line: 11) skipped --- + + + @@ -178,13 +174,9 @@ +// set e(v) {} +// } +// interface I1 /*RENAME*/extends Base { } -+// type T = { } -+// enum E { } -+// namespace N { } -+// // --- (line: 11) skipped --- - - - + // type T = { } + // enum E { } + // namespace N { } @@= skipped -103, +93 lines =@@ // set e(v) {} // } @@ -194,11 +186,6 @@ // enum E { } // namespace N { } // module M { } --// --- (line: 12) skipped --- -+// // --- (line: 12) skipped --- - - - @@= skipped -14, +14 lines =@@ // } // interface I1 extends Base { } @@ -208,11 +195,6 @@ // namespace N { } // module M { } // function fn() {} --// --- (line: 13) skipped --- -+// // --- (line: 13) skipped --- - - - @@= skipped -14, +14 lines =@@ // interface I1 extends Base { } // type T = { } diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc index d8e5f06926..30f3525c6f 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc @@ -49,7 +49,7 @@ // } // syntax2(a: A): void { // let { foo: foo } = a; -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc.diff deleted file mode 100644 index c5b0529fbe..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDestructuringClassProperty.baseline.jsonc.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- old.renameDestructuringClassProperty.baseline.jsonc -+++ new.renameDestructuringClassProperty.baseline.jsonc -@@= skipped -48, +48 lines =@@ - // } - // syntax2(a: A): void { - // let { foo: foo } = a; --// --- (line: 10) skipped --- -+// // --- (line: 10) skipped --- - - diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc index ab37f50e22..29bb09cee0 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc @@ -5,4 +5,4 @@ // } // /** // * @type {{ property: "foo"}} -// // --- (line: 6) skipped --- \ No newline at end of file +// --- (line: 6) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc.diff index 3200f0d3c8..2a897487e8 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameForStringLiteral.baseline.jsonc.diff @@ -13,4 +13,4 @@ -// const obj: Foo = { -// property: "[|fooRENAME|]", -// } -+// // --- (line: 6) skipped --- \ No newline at end of file ++// --- (line: 6) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc index 98bee31a7f..82f4dab030 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc @@ -11,7 +11,7 @@ // export { N }; // Renaming N here would rename // } // declare module "b" { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -28,7 +28,7 @@ // export { N }; // Renaming N here would rename // } // declare module "b" { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -42,7 +42,7 @@ // export { N }; // Renaming N here would rename // } // declare module "b" { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -93,7 +93,7 @@ // } // declare module "mod" { // export = N; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 9) skipped --- // } @@ -111,7 +111,7 @@ // } // declare module "mod" { // export = N; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 9) skipped --- // } diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc.diff index e3008bc1a8..59c986c82b 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameImportOfExportEquals.baseline.jsonc.diff @@ -11,7 +11,7 @@ -// import { N } from "a"; -// export const y: typeof N.x; -// } -+// // --- (line: 12) skipped --- ++// --- (line: 12) skipped --- @@ -26,7 +26,7 @@ -// import { N } from "a"; -// export const y: typeof N.x; -// } -+// // --- (line: 12) skipped --- ++// --- (line: 12) skipped --- @@ -41,7 +41,7 @@ -// import { N } from "a"; -// export const y: typeof N.x; -// } -+// // --- (line: 12) skipped --- ++// --- (line: 12) skipped --- @@ -64,22 +64,3 @@ +// export const y: typeof N.x; // } - -@@= skipped -55, +54 lines =@@ - // } - // declare module "mod" { - // export = N; --// --- (line: 6) skipped --- -+// // --- (line: 6) skipped --- - - // --- (line: 9) skipped --- - // } -@@= skipped -18, +18 lines =@@ - // } - // declare module "mod" { - // export = N; --// --- (line: 6) skipped --- -+// // --- (line: 6) skipped --- - - // --- (line: 9) skipped --- - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc index 176f9c4566..3963804bed 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc @@ -13,7 +13,7 @@ // } // } // -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -32,7 +32,7 @@ // } // } // -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -51,4 +51,4 @@ // } // } // -// // --- (line: 14) skipped --- \ No newline at end of file +// --- (line: 14) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc.diff index c2ad5857b3..606982c41f 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameLocationsForClassExpression01.baseline.jsonc.diff @@ -7,7 +7,7 @@ -// var y = class { -// getSomeName() { -// --- (line: 16) skipped --- -+// // --- (line: 14) skipped --- ++// --- (line: 14) skipped --- @@ -18,7 +18,7 @@ -// var y = class { -// getSomeName() { -// --- (line: 16) skipped --- -+// // --- (line: 14) skipped --- ++// --- (line: 14) skipped --- @@ -29,4 +29,4 @@ -// var y = class { -// getSomeName() { -// --- (line: 16) skipped --- -+// // --- (line: 14) skipped --- \ No newline at end of file ++// --- (line: 14) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc index 9220b601c8..3397ae7b16 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc @@ -4,7 +4,7 @@ // static a; // readonly b; // public c; -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -14,7 +14,7 @@ // static a; // readonly b; // public c; -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -25,7 +25,7 @@ // readonly b; // public c; // protected d; -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -37,7 +37,7 @@ // public c; // protected d; // private e; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -50,7 +50,7 @@ // protected d; // private e; // } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -64,7 +64,7 @@ // private e; // } // const enum E { -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc.diff index fe40e1eecd..3465823216 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameModifiers.baseline.jsonc.diff @@ -4,9 +4,10 @@ // === findRenameLocations === // === /renameModifiers.ts === -// /*RENAME*/declare abstract class [|C1RENAME|] { --// static a; --// readonly b; --// public c; ++// /*RENAME*/declare abstract class C1 { + // static a; + // readonly b; + // public c; -// protected d; -// private e; -// } @@ -14,15 +15,17 @@ -// } -// async function fn() {} -// export default class C2 {} -- -- -- --// === findRenameLocations === --// === /renameModifiers.ts === ++// --- (line: 5) skipped --- + + + + // === findRenameLocations === + // === /renameModifiers.ts === -// declare /*RENAME*/abstract class [|C1RENAME|] { --// static a; --// readonly b; --// public c; ++// declare /*RENAME*/abstract class C1 { + // static a; + // readonly b; + // public c; -// protected d; -// private e; -// } @@ -30,147 +33,55 @@ -// } -// async function fn() {} -// export default class C2 {} -- -- -- --// === findRenameLocations === --// === /renameModifiers.ts === --// declare abstract class C1 { ++// --- (line: 5) skipped --- + + + + // === findRenameLocations === + // === /renameModifiers.ts === + // declare abstract class C1 { -// /*RENAME*/static [|aRENAME|]; --// readonly b; --// public c; --// protected d; --// --- (line: 6) skipped --- -- -- -- --// === findRenameLocations === --// === /renameModifiers.ts === --// declare abstract class C1 { --// static a; --// /*RENAME*/readonly [|bRENAME|]; --// public c; --// protected d; --// private e; --// --- (line: 7) skipped --- -- -- -- --// === findRenameLocations === --// === /renameModifiers.ts === --// declare abstract class C1 { --// static a; --// readonly b; --// /*RENAME*/public [|cRENAME|]; --// protected d; --// private e; --// } --// --- (line: 8) skipped --- -- -- -- --// === findRenameLocations === --// === /renameModifiers.ts === --// declare abstract class C1 { --// static a; --// readonly b; --// public c; --// /*RENAME*/protected [|dRENAME|]; --// private e; --// } --// const enum E { --// --- (line: 9) skipped --- -- -- -- --// === findRenameLocations === --// === /renameModifiers.ts === --// declare abstract class C1 { --// static a; --// readonly b; --// public c; --// protected d; --// /*RENAME*/private [|eRENAME|]; -+// /*RENAME*/declare abstract class C1 { -+// static a; -+// readonly b; -+// public c; -+// // --- (line: 5) skipped --- -+ -+ -+ -+// === findRenameLocations === -+// === /renameModifiers.ts === -+// declare /*RENAME*/abstract class C1 { -+// static a; -+// readonly b; -+// public c; -+// // --- (line: 5) skipped --- -+ -+ -+ -+// === findRenameLocations === -+// === /renameModifiers.ts === -+// declare abstract class C1 { +// /*RENAME*/static a; -+// readonly b; -+// public c; -+// protected d; -+// // --- (line: 6) skipped --- -+ -+ -+ -+// === findRenameLocations === -+// === /renameModifiers.ts === -+// declare abstract class C1 { -+// static a; + // readonly b; + // public c; + // protected d; +@@= skipped -44, +32 lines =@@ + // === /renameModifiers.ts === + // declare abstract class C1 { + // static a; +-// /*RENAME*/readonly [|bRENAME|]; +// /*RENAME*/readonly b; -+// public c; -+// protected d; -+// private e; -+// // --- (line: 7) skipped --- -+ -+ -+ -+// === findRenameLocations === -+// === /renameModifiers.ts === -+// declare abstract class C1 { -+// static a; -+// readonly b; + // public c; + // protected d; + // private e; +@@= skipped -13, +13 lines =@@ + // declare abstract class C1 { + // static a; + // readonly b; +-// /*RENAME*/public [|cRENAME|]; +// /*RENAME*/public c; -+// protected d; -+// private e; -+// } -+// // --- (line: 8) skipped --- -+ -+ -+ -+// === findRenameLocations === -+// === /renameModifiers.ts === -+// declare abstract class C1 { -+// static a; -+// readonly b; -+// public c; + // protected d; + // private e; + // } +@@= skipped -14, +14 lines =@@ + // static a; + // readonly b; + // public c; +-// /*RENAME*/protected [|dRENAME|]; +// /*RENAME*/protected d; -+// private e; -+// } -+// const enum E { -+// // --- (line: 9) skipped --- -+ -+ -+ -+// === findRenameLocations === -+// === /renameModifiers.ts === -+// declare abstract class C1 { -+// static a; -+// readonly b; -+// public c; -+// protected d; + // private e; + // } + // const enum E { +@@= skipped -15, +15 lines =@@ + // readonly b; + // public c; + // protected d; +-// /*RENAME*/private [|eRENAME|]; +// /*RENAME*/private e; // } // const enum E { // } -@@= skipped -101, +89 lines =@@ +@@= skipped -15, +15 lines =@@ // protected d; // private e; // } diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc index 63c08bb37f..98644e7dc6 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc @@ -4,7 +4,7 @@ // class Foo { // f = f() // } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc.diff index 614668ad48..b85d313c9f 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralOk1.baseline.jsonc.diff @@ -11,7 +11,7 @@ -// const d: 'foo' = 'foo' -// declare const ff: Foo -// ff.f = '[|fooRENAME|]' -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc index 0640c3fdc4..c02a20509f 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc @@ -4,7 +4,7 @@ // // class C { // p: Foo = "a"; -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -17,7 +17,7 @@ // m() { // if (this.p === "a") {} // if ("a" === this.p) {} -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -32,7 +32,7 @@ // if ("a" === this.p) {} // // if (this.p !== "a") {} -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -46,7 +46,7 @@ // // if (this.p !== "a") {} // if ("a" !== this.p) {} -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -60,7 +60,7 @@ // if ("a" !== this.p) {} // // if (this.p == "a") {} -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -74,7 +74,7 @@ // // if (this.p == "a") {} // if ("a" == this.p) {} -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -88,7 +88,7 @@ // if ("a" == this.p) {} // // if (this.p != "a") {} -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc.diff index b3dbc96cb5..5400c76565 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes2.baseline.jsonc.diff @@ -230,7 +230,7 @@ +// +// class C { +// p: Foo = "a"; -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + + + @@ -243,7 +243,7 @@ +// m() { +// if (this.p === "a") {} +// if ("a" === this.p) {} -+// // --- (line: 8) skipped --- ++// --- (line: 8) skipped --- + + + @@ -258,7 +258,7 @@ +// if ("a" === this.p) {} +// +// if (this.p !== "a") {} -+// // --- (line: 10) skipped --- ++// --- (line: 10) skipped --- + + + @@ -272,7 +272,7 @@ +// +// if (this.p !== "a") {} +// if ("a" !== this.p) {} -+// // --- (line: 11) skipped --- ++// --- (line: 11) skipped --- + + + @@ -286,7 +286,7 @@ +// if ("a" !== this.p) {} +// +// if (this.p == "a") {} -+// // --- (line: 13) skipped --- ++// --- (line: 13) skipped --- + + + @@ -300,7 +300,7 @@ +// +// if (this.p == "a") {} +// if ("a" == this.p) {} -+// // --- (line: 14) skipped --- ++// --- (line: 14) skipped --- + + + @@ -314,7 +314,7 @@ +// if ("a" == this.p) {} +// +// if (this.p != "a") {} -+// // --- (line: 16) skipped --- ++// --- (line: 16) skipped --- + + + diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc index ccc899d6ec..5254325f31 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc @@ -4,7 +4,7 @@ // // class C { // p: Foo = "a"; -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -17,7 +17,7 @@ // m() { // switch (this.p) { // case "a": -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -31,4 +31,4 @@ // return 1; // case "b": // return 2; -// // --- (line: 11) skipped --- \ No newline at end of file +// --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc.diff index e31257d7b7..81d1345adf 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameStringLiteralTypes3.baseline.jsonc.diff @@ -42,15 +42,11 @@ -// m() { -// switch (this.p) { -// case "/*RENAME*/[|aRENAME|]": --// return 1; --// case "b": --// return 2; --// --- (line: 11) skipped --- +// type Foo = "/*RENAME*/a" | "b"; +// +// class C { +// p: Foo = "a"; -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + + + @@ -63,7 +59,7 @@ +// m() { +// switch (this.p) { +// case "a": -+// // --- (line: 8) skipped --- ++// --- (line: 8) skipped --- + + + @@ -74,7 +70,6 @@ +// m() { +// switch (this.p) { +// case "/*RENAME*/a": -+// return 1; -+// case "b": -+// return 2; -+// // --- (line: 11) skipped --- \ No newline at end of file + // return 1; + // case "b": + // return 2; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc index 25095184a2..17139d290f 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc @@ -5,7 +5,7 @@ // ['bool']: boolean; // } // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -19,7 +19,7 @@ // ['bool']: true, // }; // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -33,7 +33,7 @@ // [`bool`]: false, // }; // -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- @@ -61,7 +61,7 @@ // // o.bool; // o['bool']; -// // --- (line: 23) skipped --- +// --- (line: 23) skipped --- // === /b.js === // import { o as obj } from './a'; @@ -84,7 +84,7 @@ // o["num"]; // o[`num`]; // -// // --- (line: 21) skipped --- +// --- (line: 21) skipped --- @@ -98,7 +98,7 @@ // o[`num`]; // // o.bool; -// // --- (line: 22) skipped --- +// --- (line: 22) skipped --- @@ -112,7 +112,7 @@ // // o.bool; // o['bool']; -// // --- (line: 23) skipped --- +// --- (line: 23) skipped --- @@ -140,7 +140,7 @@ // // o.bool; // o['bool']; -// // --- (line: 23) skipped --- +// --- (line: 23) skipped --- // === /b.js === // import { o as obj } from './a'; @@ -173,7 +173,7 @@ // } // // let o: Obj = { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -187,7 +187,7 @@ // }; // // o = { -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -201,7 +201,7 @@ // }; // // o.num; -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc.diff index 242764bf5c..a4bfac6008 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsComputedProperties.baseline.jsonc.diff @@ -113,7 +113,7 @@ +// ['bool']: boolean; +// } +// -+// // --- (line: 6) skipped --- ++// --- (line: 6) skipped --- + + + @@ -127,7 +127,7 @@ +// ['bool']: true, +// }; +// -+// // --- (line: 11) skipped --- ++// --- (line: 11) skipped --- + + + @@ -141,29 +141,14 @@ +// [`bool`]: false, +// }; +// -+// // --- (line: 16) skipped --- ++// --- (line: 16) skipped --- -@@= skipped -132, +60 lines =@@ - // - // o.bool; - // o['bool']; --// --- (line: 23) skipped --- -- --// === /b.js === --// import { o as obj } from './a'; --// --// obj.[|numRENAME|]; --// obj[`[|numRENAME|]`]; --// --// obj.bool; --// obj[`bool`]; -- -- -- --// === findRenameLocations === --// === /a.ts === +@@= skipped -147, +75 lines =@@ + + // === findRenameLocations === + // === /a.ts === -// interface Obj { -// [`[|numRENAME|]`]: number; -// ['bool']: boolean; @@ -270,49 +255,6 @@ -// -// obj.bool; -// obj[`bool`]; -- -- -- --// === findRenameLocations === --// === /a.ts === --// interface Obj { --// [`[|numRENAME|]`]: number; --// ['bool']: boolean; --// } --// --// let o: Obj = { --// [`[|numRENAME|]`]: 0, --// ['bool']: true, --// }; --// --// o = { --// ['[|numRENAME|]']: 1, --// [`bool`]: false, --// }; --// --// o.[|numRENAME|]; --// o['[|numRENAME|]']; --// o["[|numRENAME|]"]; --// o[`[|numRENAME|]`]; --// --// o.bool; --// o['bool']; --// --- (line: 23) skipped --- -+// // --- (line: 23) skipped --- -+ -+// === /b.js === -+// import { o as obj } from './a'; -+// -+// obj.[|numRENAME|]; -+// obj[`[|numRENAME|]`]; -+// -+// obj.bool; -+// obj[`bool`]; -+ -+ -+ -+// === findRenameLocations === -+// === /a.ts === +// --- (line: 13) skipped --- +// }; +// @@ -321,7 +263,7 @@ +// o["num"]; +// o[`num`]; +// -+// // --- (line: 21) skipped --- ++// --- (line: 21) skipped --- + + + @@ -335,7 +277,7 @@ +// o[`num`]; +// +// o.bool; -+// // --- (line: 22) skipped --- ++// --- (line: 22) skipped --- + + + @@ -349,39 +291,11 @@ +// +// o.bool; +// o['bool']; -+// // --- (line: 23) skipped --- -+ -+ -+ -+// === findRenameLocations === -+// === /a.ts === -+// interface Obj { -+// [`[|numRENAME|]`]: number; -+// ['bool']: boolean; -+// } -+// -+// let o: Obj = { -+// [`[|numRENAME|]`]: 0, -+// ['bool']: true, -+// }; -+// -+// o = { -+// ['[|numRENAME|]']: 1, -+// [`bool`]: false, -+// }; -+// -+// o.[|numRENAME|]; -+// o['[|numRENAME|]']; -+// o["[|numRENAME|]"]; -+// o[`[|numRENAME|]`]; -+// -+// o.bool; -+// o['bool']; -+// // --- (line: 23) skipped --- ++// --- (line: 23) skipped --- - // === /b.js === - // import { o as obj } from './a'; -@@= skipped -162, +93 lines =@@ + + +@@= skipped -147, +78 lines =@@ // === findRenameLocations === @@ -541,7 +455,7 @@ +// } +// +// let o: Obj = { -+// // --- (line: 7) skipped --- ++// --- (line: 7) skipped --- + + + @@ -555,7 +469,7 @@ +// }; +// +// o = { -+// // --- (line: 12) skipped --- ++// --- (line: 12) skipped --- + + + @@ -569,7 +483,7 @@ +// }; +// +// o.num; -+// // --- (line: 17) skipped --- ++// --- (line: 17) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc index 0b2c07002b..df88400963 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc @@ -6,7 +6,7 @@ // // obj = { // [`prop`]: 1 -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -21,7 +21,7 @@ // }; // // obj.prop; -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc.diff index 631991ae7e..643d0915f0 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameTemplateLiteralsDefinePropertyJs.baseline.jsonc.diff @@ -103,7 +103,7 @@ +// +// obj = { +// [`prop`]: 1 -+// // --- (line: 7) skipped --- ++// --- (line: 7) skipped --- + + + @@ -118,7 +118,7 @@ +// }; +// +// obj.prop; -+// // --- (line: 10) skipped --- ++// --- (line: 10) skipped --- + + + diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc index 2ec9a73650..14182ce231 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc @@ -6,7 +6,7 @@ // otherMethod() { // if (Math.random() > 0.5) { // return {x: 42}; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- // === /mymodule.ts === // import * as mod from "./indexdef"; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff index 5310b4d085..28ddff46b2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff @@ -1,11 +1,2 @@ --- old.declarationMapGoToDefinition.baseline.jsonc -+++ new.declarationMapGoToDefinition.baseline.jsonc -@@= skipped -5, +5 lines =@@ - // otherMethod() { - // if (Math.random() > 0.5) { - // return {x: 42}; --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- - - // === /mymodule.ts === - // import * as mod from "./indexdef"; \ No newline at end of file ++++ new.declarationMapGoToDefinition.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc index a944ce8093..ea55fa59f0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc @@ -6,7 +6,7 @@ // otherMethod() { // if (Math.random() > 0.5) { // return {x: 42}; -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- // === /mymodule.ts === // import * as mod from "./out/indexdef"; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff index 3ead80aa9a..09f6861c7c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff @@ -1,11 +1,2 @@ --- old.declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc -+++ new.declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc -@@= skipped -5, +5 lines =@@ - // otherMethod() { - // if (Math.random() > 0.5) { - // return {x: 42}; --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- - - // === /mymodule.ts === - // import * as mod from "./out/indexdef"; \ No newline at end of file ++++ new.declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc index cbf997bf3d..a1330d0445 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc @@ -4,7 +4,7 @@ // constructor(){ // return; // } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // === /buttonClass/Source.ts === // // I cannot F12 navigate to Control @@ -13,7 +13,7 @@ // public myFunction() { // // I cannot F12 navigate to myVar // // vvvvv -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -36,4 +36,4 @@ // this.myVar; // } else { // this.myVar.toLocaleUpperCase(); -// // --- (line: 11) skipped --- \ No newline at end of file +// --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff index b4d707faa1..24be20c459 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff @@ -1,28 +1,11 @@ --- old.declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc +++ new.declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // constructor(){ - // return; - // } --// --- (line: 5) skipped --- -+// // --- (line: 5) skipped --- - - // === /buttonClass/Source.ts === - // // I cannot F12 navigate to Control -@@= skipped -9, +9 lines =@@ - // public myFunction() { - // // I cannot F12 navigate to myVar +@@= skipped -14, +14 lines =@@ // // vvvvv --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- + // --- (line: 7) skipped --- + + + - // === goToDefinition === // === /BaseClass/Source.ts === -@@= skipped -21, +23 lines =@@ - // this.myVar; - // } else { - // this.myVar.toLocaleUpperCase(); --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- \ No newline at end of file + // class Control{ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc index 8367930473..4b6595b779 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc @@ -6,7 +6,7 @@ // } // // async foo() { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff index 6480a9fd19..ec8d29f23c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff @@ -7,7 +7,7 @@ -// await Promise.resolve(0); -// } -// } -+// // --- (line: 7) skipped --- ++// --- (line: 7) skipped --- + + diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc index ef3945a25a..834673ea3a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc @@ -30,7 +30,7 @@ // } // // export class Derived extends Base { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -52,7 +52,7 @@ // } // // export class Derived extends Base { -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // === /defInSameFile.ts === // import { Base } from './definitions' diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff index 9696a5e358..a3b8b15c2c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff @@ -9,18 +9,16 @@ // === goToDefinition === // === /defInSameFile.ts === // import { Base } from './definitions' -@@= skipped -15, +17 lines =@@ - // } - // +@@= skipped -17, +19 lines =@@ // export class Derived extends Base { --// --- (line: 6) skipped --- -+// // --- (line: 6) skipped --- + // --- (line: 6) skipped --- + + + - // === goToDefinition === // === /hasConstructor.ts === -@@= skipped -11, +13 lines =@@ + // import { Base } from './definitions' +@@= skipped -9, +11 lines =@@ // } // const hasConstructor = new /*GOTO DEF*/HasConstructor(cArg) @@ -36,7 +34,7 @@ -// readonly email = this.cArg.getByLabel('Email') -// readonly password = this.cArg.getByLabel('Password') -// } -+// // --- (line: 6) skipped --- ++// --- (line: 6) skipped --- // === /defInSameFile.ts === // import { Base } from './definitions' \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc index 4acbe4f97b..1e7fb1043e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc @@ -7,7 +7,7 @@ // } // // var y = class C extends x { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -25,7 +25,7 @@ // } // var z = class C extends x { // m() { -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -49,7 +49,7 @@ // } // } // -// // --- (line: 19) skipped --- +// --- (line: 19) skipped --- @@ -75,7 +75,7 @@ // } // // var y = class C extends x { -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- // --- (line: 16) skipped --- // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff index a00a607281..b212f129fd 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff @@ -6,7 +6,7 @@ // var y = class C extends x { -// constructor() { -// --- (line: 9) skipped --- -+// // --- (line: 8) skipped --- ++// --- (line: 8) skipped --- + + @@ -18,7 +18,7 @@ // m() { -// return new C; -// --- (line: 16) skipped --- -+// // --- (line: 15) skipped --- ++// --- (line: 15) skipped --- + + @@ -32,7 +32,7 @@ -// var x2 = new x(); -// var y1 = new y(); -// var z1 = new z(); -+// // --- (line: 19) skipped --- ++// --- (line: 19) skipped --- + + @@ -44,7 +44,7 @@ // var y = class C extends x { -// constructor() { -// --- (line: 9) skipped --- -+// // --- (line: 8) skipped --- ++// --- (line: 8) skipped --- // --- (line: 16) skipped --- // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc index ff9c7c772a..4ec3dcce60 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc @@ -10,7 +10,7 @@ // var constructorOverload = new ConstructorOverload("foo"); // // class Extended extends ConstructorOverload { -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -27,7 +27,7 @@ // // class Extended extends ConstructorOverload { // readonly name = "extended"; -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -40,7 +40,7 @@ // } // // var constructorOverload = new ConstructorOverload(); -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff index 2020c5db9c..7722c97af7 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff @@ -1,25 +1,20 @@ --- old.goToDefinitionConstructorOverloads.baseline.jsonc +++ new.goToDefinitionConstructorOverloads.baseline.jsonc -@@= skipped -9, +9 lines =@@ - // var constructorOverload = new ConstructorOverload("foo"); - // +@@= skipped -11, +11 lines =@@ // class Extended extends ConstructorOverload { --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- + // --- (line: 11) skipped --- + + + - // === goToDefinition === // === /goToDefinitionConstructorOverloads.ts === + // class [|ConstructorOverload|] { @@= skipped -15, +17 lines =@@ - // - // class Extended extends ConstructorOverload { // readonly name = "extended"; --// --- (line: 12) skipped --- -+// // --- (line: 12) skipped --- + // --- (line: 12) skipped --- + + + - // === goToDefinition === // === /goToDefinitionConstructorOverloads.ts === // class ConstructorOverload { @@ -31,14 +26,14 @@ // } // // var constructorOverload = new ConstructorOverload(); --// --- (line: 8) skipped --- -+// // --- (line: 8) skipped --- + // --- (line: 8) skipped --- + + + - // === goToDefinition === // === /goToDefinitionConstructorOverloads.ts === -@@= skipped -29, +33 lines =@@ + // class ConstructorOverload { +@@= skipped -27, +31 lines =@@ // } // var extended1 = new /*GOTO DEF*/Extended(); // var extended2 = new Extended("foo"); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc index 1acfdd2dfc..ea77c70996 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc @@ -7,7 +7,7 @@ // public fnOverload(): any; // public fnOverload(foo: string); // public fnOverload(foo: any) { return "foo" } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff index 9237d53823..7110c46b00 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff @@ -12,14 +12,13 @@ // public fnOverload(): any; // public fnOverload(foo: string); // public fnOverload(foo: any) { return "foo" } --// --- (line: 8) skipped --- -+// // --- (line: 8) skipped --- + // --- (line: 8) skipped --- + + + - // === goToDefinition === // === /goToDefinitionFunctionOverloadsInClass.ts === -@@= skipped -14, +16 lines =@@ + // class clsInOverload { // static fnOverload(); // static fnOverload(foo: string); // static fnOverload(foo: any) { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc index cac8a22add..54ecba10e0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc @@ -5,7 +5,7 @@ // function test(cb: () => void) { // cb(); // } -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- @@ -18,7 +18,7 @@ // } // class C { // prop: () => void; -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff index 3a06059477..27d77419c6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff @@ -10,11 +10,9 @@ // function test(cb: () => void) { // cb(); // } --// --- (line: 6) skipped --- -- + // --- (line: 6) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 6) skipped --- -+ + + +// === goToDefinition === @@ -27,11 +25,9 @@ // } // class C { // prop: () => void; --// --- (line: 8) skipped --- -- + // --- (line: 8) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 8) skipped --- -+ + + +// === goToDefinition === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc index 9b92030eb2..a23ea590eb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc @@ -13,7 +13,7 @@ // public _class: Foo = new Foo(); // public _list: IFoo[]=[]; // public _enum: Enum = Enum.value1; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- @@ -23,7 +23,7 @@ // // class Foo implements IFoo { // public method1(): number { return 0; } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 8) skipped --- // class Bar { @@ -33,7 +33,7 @@ // public _enum: Enum = Enum.value1; // public _self: Bar; // -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- @@ -43,7 +43,7 @@ // // class Foo implements IFoo { // public method1(): number { return 0; } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 12) skipped --- // public _enum: Enum = Enum.value1; @@ -71,7 +71,7 @@ // public _list: IFoo[]=[]; // public _enum: Enum = Enum.value1; // public _self: Bar; -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -90,7 +90,7 @@ // public _class: Foo = new Foo(); // public _list: IFoo[]=[]; // public _enum: Enum = Enum.value1; -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff index 24bff071c9..cb584feca3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff @@ -1,46 +1,24 @@ --- old.goToDefinitionInMemberDeclaration.baseline.jsonc +++ new.goToDefinitionInMemberDeclaration.baseline.jsonc -@@= skipped -12, +12 lines =@@ - // public _class: Foo = new Foo(); - // public _list: IFoo[]=[]; +@@= skipped -14, +14 lines =@@ // public _enum: Enum = Enum.value1; --// --- (line: 14) skipped --- -+// // --- (line: 14) skipped --- + // --- (line: 14) skipped --- + + + - // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === -@@= skipped -8, +10 lines =@@ + // interface [|IFoo|] { method1(): number; } +@@= skipped -18, +20 lines =@@ // - // class Foo implements IFoo { - // public method1(): number { return 0; } --// --- (line: 5) skipped --- -+// // --- (line: 5) skipped --- + // --- (line: 16) skipped --- - // --- (line: 8) skipped --- - // class Bar { -@@= skipped -10, +10 lines =@@ - // public _enum: Enum = Enum.value1; - // public _self: Bar; - // --// --- (line: 16) skipped --- -+// // --- (line: 16) skipped --- + + - // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === -@@= skipped -8, +10 lines =@@ - // - // class Foo implements IFoo { - // public method1(): number { return 0; } --// --- (line: 5) skipped --- -+// // --- (line: 5) skipped --- - - // --- (line: 12) skipped --- - // public _enum: Enum = Enum.value1; -@@= skipped -10, +10 lines =@@ + // interface [|IFoo|] { method1(): number; } +@@= skipped -16, +18 lines =@@ // } // } @@ -49,29 +27,25 @@ // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === // interface IFoo { method1(): number; } -@@= skipped -16, +18 lines =@@ - // public _list: IFoo[]=[]; - // public _enum: Enum = Enum.value1; +@@= skipped -18, +20 lines =@@ // public _self: Bar; --// --- (line: 15) skipped --- -+// // --- (line: 15) skipped --- + // --- (line: 15) skipped --- + + + - // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === + // interface IFoo { method1(): number; } @@= skipped -17, +19 lines =@@ - // public _class: Foo = new Foo(); - // public _list: IFoo[]=[]; // public _enum: Enum = Enum.value1; --// --- (line: 14) skipped --- -+// // --- (line: 14) skipped --- + // --- (line: 14) skipped --- + + + - // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === -@@= skipped -21, +23 lines =@@ + // --- (line: 3) skipped --- +@@= skipped -19, +21 lines =@@ // } // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc index 6bd0439d00..385ae00ef8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc @@ -15,7 +15,7 @@ // declare const ij: I | J; // ij.foo; // declare const k: K; -// // --- (line: 16) skipped --- +// --- (line: 16) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff index 88429a8ba0..267f553d42 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff @@ -1,17 +1,15 @@ --- old.goToDefinitionIndexSignature.baseline.jsonc +++ new.goToDefinitionIndexSignature.baseline.jsonc -@@= skipped -14, +14 lines =@@ - // declare const ij: I | J; - // ij.foo; +@@= skipped -16, +16 lines =@@ // declare const k: K; --// --- (line: 16) skipped --- -+// // --- (line: 16) skipped --- + // --- (line: 16) skipped --- + + + - // === goToDefinition === // === /goToDefinitionIndexSignature.ts === -@@= skipped -23, +25 lines =@@ + // interface I { +@@= skipped -21, +23 lines =@@ // k.b; // k.ab; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc index a7d816c66d..8e9000452d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc @@ -87,7 +87,7 @@ // public method(): any; // public method(foo: string); // public method(foo?: any) { return "foo" } -// // --- (line: 8) skipped --- +// --- (line: 8) skipped --- @@ -103,4 +103,4 @@ // } // // static method // MethodOverload.method(); -// // --- (line: 11) skipped --- \ No newline at end of file +// --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff index 58cdfed6a5..61a6720b82 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff @@ -44,14 +44,13 @@ // public method(): any; // public method(foo: string); // public method(foo?: any) { return "foo" } --// --- (line: 8) skipped --- -+// // --- (line: 8) skipped --- + // --- (line: 8) skipped --- + + + - // === goToDefinition === // === /goToDefinitionMethodOverloads.ts === -@@= skipped -17, +21 lines =@@ + // class MethodOverload { // static method(); // static method(foo: string); // static method(foo?: any) { } @@ -61,7 +60,4 @@ +// public [|method|](foo: string); // public [|method|](foo?: any) { return "foo" } // } - // // static method - // MethodOverload.method(); --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- \ No newline at end of file + // // static method \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc index 25bd1b90c5..ca3234f881 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc @@ -4,7 +4,7 @@ // // private z: string; // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -14,7 +14,7 @@ // // private z: string; // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -26,7 +26,7 @@ // // readonly x: string; // -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -38,7 +38,7 @@ // // readonly x: string; // -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -52,7 +52,7 @@ // // async a() { } // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -66,7 +66,7 @@ // // async a() { } // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -80,7 +80,7 @@ // // override b() {} // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -94,7 +94,7 @@ // // override b() {} // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff index 8fceb51392..f1ab87eafd 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff @@ -14,7 +14,7 @@ -// } -// -// export function foo() { } -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + + @@ -35,21 +35,18 @@ -// } -// -// export function foo() { } -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + + // === goToDefinition === // === /a.ts === -@@= skipped -36, +22 lines =@@ +@@= skipped -38, +24 lines =@@ // - // readonly x: string; - // --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- + // --- (line: 7) skipped --- + + + - // === goToDefinition === // === /a.ts === // export class A { @@ -59,8 +56,7 @@ // // readonly x: string; // --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- + // --- (line: 7) skipped --- + + @@ -68,16 +64,13 @@ // === /a.ts === @@= skipped -22, +26 lines =@@ // - // async a() { } - // --// --- (line: 9) skipped --- -+// // --- (line: 9) skipped --- + // --- (line: 9) skipped --- + + + - // === goToDefinition === // === /a.ts === -@@= skipped -8, +10 lines =@@ + // export class A { // // private z: string; // @@ -86,25 +79,21 @@ // // async a() { } // --// --- (line: 9) skipped --- -+// // --- (line: 9) skipped --- + // --- (line: 9) skipped --- + + // === goToDefinition === // === /a.ts === -@@= skipped -16, +18 lines =@@ - // - // override b() {} +@@= skipped -24, +28 lines =@@ // --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- + // --- (line: 11) skipped --- + + + - // === goToDefinition === // === /a.ts === -@@= skipped -8, +10 lines =@@ + // --- (line: 3) skipped --- // // readonly x: string; // @@ -113,14 +102,13 @@ // // override b() {} // --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- + // --- (line: 11) skipped --- + + // === goToDefinition === // === /a.ts === -@@= skipped -19, +21 lines =@@ +@@= skipped -25, +29 lines =@@ // // export function foo() { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc index fe6efb5625..c5806d6112 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc @@ -6,4 +6,4 @@ // * @returns {{}} // */ // static foo() { -// // --- (line: 7) skipped --- \ No newline at end of file +// --- (line: 7) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff deleted file mode 100644 index ec2e33eed4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember16.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.goToDefinitionOverriddenMember16.baseline.jsonc -+++ new.goToDefinitionOverriddenMember16.baseline.jsonc -@@= skipped -5, +5 lines =@@ - // * @returns {{}} - // */ - // static foo() { --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc index 1e47e146ff..012d454dcd 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc @@ -6,7 +6,7 @@ // /// // // class clsInOverload { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -19,4 +19,4 @@ // // class clsInOverload { // static fnOverload(); -// // --- (line: 8) skipped --- \ No newline at end of file +// --- (line: 8) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff index 0c60b7b842..7c4b0dd588 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSourceUnit.baseline.jsonc.diff @@ -13,9 +13,8 @@ +// /// // -// class clsInOverload { --// --- (line: 7) skipped --- +// class clsInOverload { -+// // --- (line: 7) skipped --- + // --- (line: 7) skipped --- @@ -35,7 +34,6 @@ // -// class clsInOverload { -// static fnOverload(); --// --- (line: 8) skipped --- +// class clsInOverload { +// static fnOverload(); -+// // --- (line: 8) skipped --- \ No newline at end of file + // --- (line: 8) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc index b3498dbaa3..7f483e9c02 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc @@ -17,7 +17,7 @@ // prop: 0, // }; // const u2: U = { -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff index c60910e83e..3b9b6290d2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff @@ -1,17 +1,15 @@ --- old.goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc +++ new.goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc -@@= skipped -16, +16 lines =@@ - // prop: 0, - // }; +@@= skipped -18, +18 lines =@@ // const u2: U = { --// --- (line: 18) skipped --- -+// // --- (line: 18) skipped --- + // --- (line: 18) skipped --- + + + - // === goToDefinition === // === /goToDefinitionUnionTypeProperty_discriminated.ts === -@@= skipped -25, +27 lines =@@ + // type U = A | B; +@@= skipped -23, +25 lines =@@ // prop: 0, // }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc index ddfd04564f..7071b5bb56 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc @@ -6,7 +6,7 @@ // } // // foo*() { -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff index 296e3d0228..d44c4743a9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff @@ -7,7 +7,7 @@ -// yield 0; -// } -// } -+// // --- (line: 7) skipped --- ++// --- (line: 7) skipped --- + + diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc index 6b8bf67ca8..29fff6be02 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc @@ -5,7 +5,7 @@ // return 1; // }, // name: "test", -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 17) skipped --- // name: true, diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff index 9e2b3ed2cc..f60d3845ab 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff @@ -7,7 +7,7 @@ -// }; -// -// --- (line: 8) skipped --- -+// // --- (line: 6) skipped --- ++// --- (line: 6) skipped --- // --- (line: 17) skipped --- // name: true, \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc index c79dc5bd9d..50d632d1cb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc @@ -11,7 +11,7 @@ // } // method() { // super.x(); -// // --- (line: 12) skipped --- +// --- (line: 12) skipped --- @@ -31,7 +31,7 @@ // } // } // class D { -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff index 87a6a32571..a9f2a55d0a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff @@ -1,22 +1,18 @@ --- old.goToDefinition_super.baseline.jsonc +++ new.goToDefinition_super.baseline.jsonc -@@= skipped -10, +10 lines =@@ - // } - // method() { +@@= skipped -12, +12 lines =@@ // super.x(); --// --- (line: 12) skipped --- -+// // --- (line: 12) skipped --- + // --- (line: 12) skipped --- + + + - // === goToDefinition === // === /goToDefinition_super.ts === -@@= skipped -18, +20 lines =@@ - // } + // class A { +@@= skipped -17, +19 lines =@@ // } // class D { --// --- (line: 15) skipped --- -+// // --- (line: 15) skipped --- + // --- (line: 15) skipped --- + + diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc index 01216c4283..7a13785ff3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc @@ -12,7 +12,7 @@ // const a = "" // /** {@link NS.Bar} ns.bar*/ // const b = "" -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -32,7 +32,7 @@ // const b = "" // /** {@link Foo f1}*/ // const c = "" -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -42,7 +42,7 @@ // foo: string // } // namespace NS { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 9) skipped --- // const a = "" @@ -52,7 +52,7 @@ // const c = "" // /** {@link NS.Bar ns.bar}*/ // const d = "" -// // --- (line: 17) skipped --- +// --- (line: 17) skipped --- @@ -101,7 +101,7 @@ // foo: string // } // namespace NS { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 15) skipped --- // const d = "" @@ -118,7 +118,7 @@ // foo: string // } // namespace NS { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // === /bar.ts === // /** {@link /*GOTO DEF*/Foo }dd*/ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff index 043fffb0bb..36039fa8c2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff @@ -15,11 +15,9 @@ // const a = "" // /** {@link NS.Bar} ns.bar*/ // const b = "" --// --- (line: 13) skipped --- -- + // --- (line: 13) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 13) skipped --- -+ + + +// === goToDefinition === @@ -35,11 +33,9 @@ // const b = "" // /** {@link Foo f1}*/ // const c = "" --// --- (line: 15) skipped --- -- + // --- (line: 15) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 15) skipped --- -+ + + +// === goToDefinition === @@ -53,7 +49,7 @@ -// } -// } -// /** {@link Foo} foooo*/ -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + +// --- (line: 9) skipped --- // const a = "" @@ -64,11 +60,9 @@ // const c = "" // /** {@link NS.Bar ns.bar}*/ // const d = "" --// --- (line: 17) skipped --- -- + // --- (line: 17) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 17) skipped --- -+ + + +// === goToDefinition === @@ -115,7 +109,7 @@ -// export interface Bar { -// baz: Foo -// --- (line: 7) skipped --- -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- // --- (line: 15) skipped --- // const d = "" @@ -137,7 +131,7 @@ -// export interface Bar { -// baz: Foo -// --- (line: 7) skipped --- -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- // === /bar.ts === -// /** {@link /*GOTO DEF POS*/Foo }dd*/ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc index cb2a5e5e2c..3d145e543a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc @@ -12,7 +12,7 @@ // const a = "" // /** @see {NS.Bar} ns.bar*/ // const b = "" -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -32,7 +32,7 @@ // const b = "" // /** @see Foo f1*/ // const c = "" -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- @@ -42,7 +42,7 @@ // foo: string // } // namespace NS { -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 9) skipped --- // const a = "" diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff index 1f4772cd6b..9239757c1d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff @@ -15,11 +15,9 @@ // const a = "" // /** @see {NS.Bar} ns.bar*/ // const b = "" --// --- (line: 13) skipped --- -- + // --- (line: 13) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 13) skipped --- -+ + + +// === goToDefinition === @@ -35,11 +33,9 @@ // const b = "" // /** @see Foo f1*/ // const c = "" --// --- (line: 15) skipped --- -- + // --- (line: 15) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 15) skipped --- -+ + + +// === goToDefinition === @@ -53,7 +49,7 @@ -// } -// } -// /** @see {Foo} foooo*/ -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + +// --- (line: 9) skipped --- // const a = "" diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc index 3ee62a5126..73f64095e1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc @@ -4,7 +4,7 @@ // const a = "" // /** @see {@bar} invalid tag*/ // const b = "" -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -16,7 +16,7 @@ // const b = "" // /** @see foooo unknown reference without brace*/ // const c = "" -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -30,7 +30,7 @@ // const c = "" // /** @see @bar invalid tag without brace*/ // const d = "" -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -44,7 +44,7 @@ // const d = "" // /** @see {d@fff} partial reference */ // const e = "" -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff index a29ac1298e..f6bf716112 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff @@ -1,47 +1,11 @@ --- old.jsDocSee2.baseline.jsonc +++ new.jsDocSee2.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // const a = "" - // /** @see {@bar} invalid tag*/ - // const b = "" --// --- (line: 5) skipped --- -+// // --- (line: 5) skipped --- - - - -@@= skipped -12, +12 lines =@@ - // const b = "" - // /** @see foooo unknown reference without brace*/ - // const c = "" --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- - - - -@@= skipped -14, +14 lines =@@ - // const c = "" - // /** @see @bar invalid tag without brace*/ - // const d = "" --// --- (line: 9) skipped --- -+// // --- (line: 9) skipped --- - - - -@@= skipped -14, +14 lines =@@ - // const d = "" - // /** @see {d@fff} partial reference */ - // const e = "" --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- - - - -@@= skipped -17, +17 lines =@@ - // const f = "" +@@= skipped -61, +61 lines =@@ // /** @see d@{fff} partial reference */ // const g = "" + + + - // === goToDefinition === - // === /jsDocSee2.ts === \ No newline at end of file + // === /jsDocSee2.ts === + // --- (line: 7) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc index 8a66dabeb4..3238d2c2a0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc @@ -9,7 +9,7 @@ // */ // const t1 = 1 // /** -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- @@ -28,7 +28,7 @@ // */ // const t2 = 1 // /** -// // --- (line: 14) skipped --- +// --- (line: 14) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff index 15d9ca7bbb..510c0c1707 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff @@ -14,11 +14,9 @@ // */ // const t1 = 1 // /** --// --- (line: 10) skipped --- -- + // --- (line: 10) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 10) skipped --- -+ + + +// === goToDefinition === @@ -34,11 +32,9 @@ // */ // const t2 = 1 // /** --// --- (line: 14) skipped --- -- + // --- (line: 14) skipped --- + -// === getDefinitionAtPosition === -+// // --- (line: 14) skipped --- -+ + + +// === goToDefinition === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc index 711b5b0614..a9cce6e7ca 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc @@ -4,4 +4,4 @@ // // // -// // --- (line: 5) skipped --- \ No newline at end of file +// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff index 687762b7d8..f3cf53627d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff @@ -583714,4 +583714,4 @@ +// +// +// -+// // --- (line: 5) skipped --- \ No newline at end of file ++// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc index df5cc51199..70accb72a6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc @@ -28,4 +28,4 @@ // public sure() {} // } // -// // --- (line: 11) skipped --- \ No newline at end of file +// --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff index b4c6c1c7b9..ab1e266da5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff @@ -8,10 +8,4 @@ + // === goToImplementation === // === /goToImplementationInterfaceMethod_01.ts === - // interface Foo { -@@= skipped -12, +14 lines =@@ - // public sure() {} - // } - // --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- \ No newline at end of file + // interface Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc index 06b1eedf54..1393f52c5a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc @@ -9,7 +9,7 @@ // } // // class SuperBar implements Foo { -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- // --- (line: 13) skipped --- // hello() {} // should not show up diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff index bac7e01f2e..c13b9baf3f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff @@ -1,11 +1,2 @@ --- old.goToImplementationInterfaceMethod_03.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_03.baseline.jsonc -@@= skipped -8, +8 lines =@@ - // } - // - // class SuperBar implements Foo { --// --- (line: 10) skipped --- -+// // --- (line: 10) skipped --- - - // --- (line: 13) skipped --- - // hello() {} // should not show up \ No newline at end of file ++++ new.goToImplementationInterfaceMethod_03.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc index 0372ac41ca..4be8b989f8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc @@ -17,7 +17,7 @@ // hello2() {} // hello3() {} // } -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 22) skipped --- // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff index 6febaa79b6..c768d4906e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff @@ -13,7 +13,7 @@ +// hello2() {} +// hello3() {} +// } -+// // --- (line: 18) skipped --- ++// --- (line: 18) skipped --- -// --- (line: 26) skipped --- +// --- (line: 22) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc index 8a2b891041..90dfe6451e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc @@ -8,4 +8,4 @@ // // var bar: Foo = { hello: helloImpl /**0*/ }; // var baz: Foo[] = [{ hello: helloImpl /**4*/ }]; -// // --- (line: 9) skipped --- \ No newline at end of file +// --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff index bcef031a38..43f53d9fe8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff @@ -19,4 +19,4 @@ -// } +// var bar: Foo = { hello: helloImpl /**0*/ }; +// var baz: Foo[] = [{ hello: helloImpl /**4*/ }]; -+// // --- (line: 9) skipped --- \ No newline at end of file ++// --- (line: 9) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc index 9cec971fe2..b2c3c131a4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc @@ -17,4 +17,4 @@ // hello () {} // } // -// // --- (line: 18) skipped --- \ No newline at end of file +// --- (line: 18) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff index 873d9b32d5..e817a99afa 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff @@ -7,4 +7,4 @@ -// var x = new SuperBar(); -// var y: SuperBar = new SuperBar(); -// var z: AbstractBar = new NotAbstractBar(); -+// // --- (line: 18) skipped --- \ No newline at end of file ++// --- (line: 18) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc index 8ce731f3d2..4b1b5a082d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc @@ -4,4 +4,4 @@ // // let x: number = 9; // -// // --- (line: 5) skipped --- \ No newline at end of file +// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff index 7200ef7c34..b3ca591c4c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_02.baseline.jsonc.diff @@ -20,4 +20,4 @@ -// function createFooLike() { -// return { -// --- (line: 20) skipped --- -+// // --- (line: 5) skipped --- \ No newline at end of file ++// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc index a5975ebf89..d6d7125413 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc @@ -4,4 +4,4 @@ // (a: number): void // } // -// // --- (line: 5) skipped --- \ No newline at end of file +// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff index 374357210f..b905478ab2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_04.baseline.jsonc.diff @@ -14,4 +14,4 @@ -// -// constructor(public f: Foo = [|function(a) {}|] ) {} -// } -+// // --- (line: 5) skipped --- \ No newline at end of file ++// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc index 4fb84f5039..0ea329ee7b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc @@ -4,4 +4,4 @@ // new (a: number): SomeOtherType; // } // -// // --- (line: 5) skipped --- \ No newline at end of file +// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff index f93bac5c90..edb8707298 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_06.baseline.jsonc.diff @@ -8,4 +8,4 @@ -// -// let x: Foo = [|class { constructor (a: number) {} }|]; -// let y = [|class { constructor (a: number) {} }|]; -+// // --- (line: 5) skipped --- \ No newline at end of file ++// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc index 2b2a5c0bc5..797bd86e33 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc @@ -4,7 +4,7 @@ // hello (): void; // } // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 8) skipped --- // let x1: Foo = { hello () { /**typeReference*/ } }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff index 543dc36acb..ac025f8f5e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff @@ -11,7 +11,7 @@ -// let x1: Foo = [|{ hello () { /**typeReference*/ } }|]; -// let x2: () => Foo = [|(() => { hello () { /**functionType*/} })|]; -// let x3: Foo | Bar = [|{ hello () { /**unionType*/} }|]; -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + +// --- (line: 8) skipped --- +// let x1: Foo = { hello () { /**typeReference*/ } }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc index 88a6a66e7f..98d7f29155 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc @@ -18,7 +18,7 @@ // // } // -// // --- (line: 27) skipped --- +// --- (line: 27) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff index 9438a83feb..fd40604023 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff @@ -11,7 +11,7 @@ +// +// } +// -+// // --- (line: 27) skipped --- ++// --- (line: 27) skipped --- + + diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc index 192f1dbe39..4585dcaea6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc @@ -8,7 +8,7 @@ // createBarInClassExpression(): Bar { // return { // Foo -// // --- (line: 18) skipped --- +// --- (line: 18) skipped --- // --- (line: 22) skipped --- // @@ -18,7 +18,7 @@ // // } // -// // --- (line: 30) skipped --- +// --- (line: 30) skipped --- // --- (line: 37) skipped --- // someFunction() {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff index 0da8ed4fcf..2a3ff11400 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff @@ -9,7 +9,7 @@ -// -// someFunction() {} -// }; -+// // --- (line: 18) skipped --- ++// --- (line: 18) skipped --- + +// --- (line: 22) skipped --- // @@ -22,7 +22,7 @@ -// function createBarUsingClassDeclaration(): Bar { -// return { -// --- (line: 32) skipped --- -+// // --- (line: 30) skipped --- ++// --- (line: 30) skipped --- // --- (line: 37) skipped --- // someFunction() {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc index 6717105ad0..4bda3eac64 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc @@ -4,4 +4,4 @@ // foo: string; // } // -// // --- (line: 5) skipped --- \ No newline at end of file +// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff index 8fb3529aeb..71e145f754 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_satisfies.baseline.jsonc.diff @@ -7,4 +7,4 @@ -// function f() { -// const foo = [|{ foo: '' }|] satisfies I; -// } -+// // --- (line: 5) skipped --- \ No newline at end of file ++// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc index beaf380dc5..3f56cff912 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc @@ -4,7 +4,7 @@ // p; // } // type propertyType = I1; -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // === /goToTypeDefinition2_Consumption.ts === // var i2: I2; diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff index a70f2d771a..bb21c86720 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff @@ -7,7 +7,7 @@ -// interface I2 { -// property: propertyType; -// } -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- // === /goToTypeDefinition2_Consumption.ts === // var i2: I2; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc index c6416aa695..f7107255c2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc @@ -4,7 +4,7 @@ // // private z: string; // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -14,7 +14,7 @@ // // private z: string; // -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- @@ -26,7 +26,7 @@ // // private y: A; // -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -38,7 +38,7 @@ // // private y: A; // -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- @@ -52,7 +52,7 @@ // // readonly x: string; // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -66,7 +66,7 @@ // // readonly x: string; // -// // --- (line: 9) skipped --- +// --- (line: 9) skipped --- @@ -80,7 +80,7 @@ // // async a() { } // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -94,7 +94,7 @@ // // async a() { } // -// // --- (line: 11) skipped --- +// --- (line: 11) skipped --- @@ -108,7 +108,7 @@ // // override b() {} // -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- @@ -122,7 +122,7 @@ // // override b() {} // -// // --- (line: 13) skipped --- +// --- (line: 13) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff index 824949b799..92dbd9926d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff @@ -16,7 +16,7 @@ -// } -// -// export function foo() { } -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + + @@ -38,31 +38,13 @@ -// } -// -// export function foo() { } -+// // --- (line: 5) skipped --- ++// --- (line: 5) skipped --- + + // === goToType === // === /a.ts === -@@= skipped -21, +12 lines =@@ - // - // private y: A; - // --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- - - - -@@= skipped -12, +12 lines =@@ - // - // private y: A; - // --// --- (line: 7) skipped --- -+// // --- (line: 7) skipped --- - - - -@@= skipped -14, +14 lines =@@ +@@= skipped -47, +38 lines =@@ // // readonly x: string; // @@ -74,7 +56,7 @@ -// } -// -// export function foo() { } -+// // --- (line: 9) skipped --- ++// --- (line: 9) skipped --- + + @@ -92,28 +74,13 @@ -// } -// -// export function foo() { } -+// // --- (line: 9) skipped --- ++// --- (line: 9) skipped --- + + // === goToType === // === /a.ts === -@@= skipped -19, +14 lines =@@ - // - // async a() { } - // --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- - - - -@@= skipped -14, +14 lines =@@ - // - // async a() { } - // --// --- (line: 11) skipped --- -+// // --- (line: 11) skipped --- - +@@= skipped -38, +33 lines =@@ // === goToType === @@ -146,15 +113,12 @@ // === /a.ts === // --- (line: 5) skipped --- // -@@= skipped -40, +14 lines =@@ +@@= skipped -37, +11 lines =@@ // - // override b() {} - // --// --- (line: 13) skipped --- -+// // --- (line: 13) skipped --- + // --- (line: 13) skipped --- + + + - // === goToType === -// === lib.d.ts === -// --- (line: --) skipped --- @@ -187,10 +151,8 @@ // @@= skipped -38, +14 lines =@@ // - // override b() {} - // --// --- (line: 13) skipped --- -- + // --- (line: 13) skipped --- + -// === goToType === -// === /a.ts === -// --- (line: 7) skipped --- @@ -244,8 +206,6 @@ -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. -// --- (line: --) skipped --- - -+// // --- (line: 13) skipped --- -+ + + +// === goToType === @@ -282,7 +242,7 @@ // === /a.ts === // --- (line: 9) skipped --- // -@@= skipped -65, +45 lines =@@ +@@= skipped -63, +43 lines =@@ // // export function foo() { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc index e984cc5804..e7dc0a98b2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc @@ -6,7 +6,7 @@ // // type UsersArr = Array // declare const users2: UsersArr -// // --- (line: 7) skipped --- +// --- (line: 7) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff index efe5b86899..d2e8016f9f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff @@ -1,11 +1,9 @@ --- old.goToTypeDefinition_arrayType.baseline.jsonc +++ new.goToTypeDefinition_arrayType.baseline.jsonc -@@= skipped -5, +5 lines =@@ - // - // type UsersArr = Array +@@= skipped -7, +7 lines =@@ // declare const users2: UsersArr --// --- (line: 7) skipped --- -- + // --- (line: 7) skipped --- + -// === lib.d.ts === -// --- (line: --) skipped --- -// slice(start?: number, end?: number): T[]; @@ -202,7 +200,7 @@ -// interface ArrayConstructor { -// new (arrayLength?: number): any[]; -// --- (line: --) skipped --- -- + -// --- (line: --) skipped --- -// readonly prototype: any[]; -// } @@ -212,13 +210,10 @@ -// interface TypedPropertyDescriptor { -// enumerable?: boolean; -// --- (line: --) skipped --- -+// // --- (line: 7) skipped --- -+ -+ // === goToType === // === /goToTypeDefinition_arrayType.ts === -@@= skipped -223, +18 lines =@@ +@@= skipped -221, +16 lines =@@ // declare const users3: CustomArray // users3 diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc index 33d20e328a..9ad76c35b4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc @@ -4,7 +4,7 @@ // interface J { y: number; } // // function f0(): I { return { x: 0 }; } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 21) skipped --- // function f8(j: J): J; @@ -14,7 +14,7 @@ // f1(); // f2(); // f3(); -// // --- (line: 29) skipped --- +// --- (line: 29) skipped --- @@ -29,7 +29,7 @@ // const f1: T = i => ({ x: i.x + 1 }); // // const f2 = (i: I): I => ({ x: i.x + 1 }); -// // --- (line: 10) skipped --- +// --- (line: 10) skipped --- // --- (line: 22) skipped --- // function f8(ij: any): any { return ij; } @@ -39,7 +39,7 @@ // f2(); // f3(); // f4(); -// // --- (line: 30) skipped --- +// --- (line: 30) skipped --- @@ -49,7 +49,7 @@ // interface J { y: number; } // // function f0(): I { return { x: 0 }; } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 23) skipped --- // @@ -59,7 +59,7 @@ // f3(); // f4(); // f5(); -// // --- (line: 31) skipped --- +// --- (line: 31) skipped --- @@ -73,7 +73,7 @@ // // const f4 = (i: I) => i; // -// // --- (line: 15) skipped --- +// --- (line: 15) skipped --- // --- (line: 24) skipped --- // f0(); @@ -94,7 +94,7 @@ // interface J { y: number; } // // function f0(): I { return { x: 0 }; } -// // --- (line: 5) skipped --- +// --- (line: 5) skipped --- // --- (line: 25) skipped --- // f1(); @@ -115,7 +115,7 @@ // // function f0(): I { return { x: 0 }; } // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 26) skipped --- // f2(); @@ -135,7 +135,7 @@ // // function f0(): I { return { x: 0 }; } // -// // --- (line: 6) skipped --- +// --- (line: 6) skipped --- // --- (line: 27) skipped --- // f3(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff index e97eccde75..0f91326f23 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff @@ -1,75 +1,33 @@ --- old.goToTypeDefinition_returnType.baseline.jsonc +++ new.goToTypeDefinition_returnType.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // interface J { y: number; } - // - // function f0(): I { return { x: 0 }; } --// --- (line: 5) skipped --- -+// // --- (line: 5) skipped --- - - // --- (line: 21) skipped --- - // function f8(j: J): J; -@@= skipped -10, +10 lines =@@ - // f1(); - // f2(); +@@= skipped -15, +15 lines =@@ // f3(); --// --- (line: 29) skipped --- -+// // --- (line: 29) skipped --- + // --- (line: 29) skipped --- + + + - // === goToType === // === /goToTypeDefinition_returnType.ts === -@@= skipped -13, +15 lines =@@ - // const f1: T = i => ({ x: i.x + 1 }); - // - // const f2 = (i: I): I => ({ x: i.x + 1 }); --// --- (line: 10) skipped --- -+// // --- (line: 10) skipped --- - - // --- (line: 22) skipped --- - // function f8(ij: any): any { return ij; } -@@= skipped -10, +10 lines =@@ - // f2(); - // f3(); + // interface I { x: number; } +@@= skipped -23, +25 lines =@@ // f4(); --// --- (line: 30) skipped --- -+// // --- (line: 30) skipped --- + // --- (line: 30) skipped --- + + + - // === goToType === // === /goToTypeDefinition_returnType.ts === -@@= skipped -8, +10 lines =@@ - // interface J { y: number; } - // - // function f0(): I { return { x: 0 }; } --// --- (line: 5) skipped --- -+// // --- (line: 5) skipped --- - - // --- (line: 23) skipped --- - // -@@= skipped -10, +10 lines =@@ - // f3(); - // f4(); + // interface [|I|] { x: number; } +@@= skipped -18, +20 lines =@@ // f5(); --// --- (line: 31) skipped --- -+// // --- (line: 31) skipped --- + // --- (line: 31) skipped --- + + + - // === goToType === // === /goToTypeDefinition_returnType.ts === -@@= skipped -12, +14 lines =@@ - // - // const f4 = (i: I) => i; - // --// --- (line: 15) skipped --- -+// // --- (line: 15) skipped --- - - // --- (line: 24) skipped --- - // f0(); -@@= skipped -13, +13 lines =@@ + // --- (line: 7) skipped --- +@@= skipped -23, +25 lines =@@ // f7(); // f8(); @@ -78,14 +36,6 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === // interface [|I|] { x: number; } - // interface J { y: number; } - // - // function f0(): I { return { x: 0 }; } --// --- (line: 5) skipped --- -+// // --- (line: 5) skipped --- - - // --- (line: 25) skipped --- - // f1(); @@= skipped -18, +20 lines =@@ // f7(); // f8(); @@ -95,16 +45,7 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === // interface [|I|] { x: number; } -@@= skipped -7, +9 lines =@@ - // - // function f0(): I { return { x: 0 }; } - // --// --- (line: 6) skipped --- -+// // --- (line: 6) skipped --- - - // --- (line: 26) skipped --- - // f2(); -@@= skipped -11, +11 lines =@@ +@@= skipped -18, +20 lines =@@ // f7(); // f8(); @@ -113,16 +54,7 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === // interface [|I|] { x: number; } -@@= skipped -7, +9 lines =@@ - // - // function f0(): I { return { x: 0 }; } - // --// --- (line: 6) skipped --- -+// // --- (line: 6) skipped --- - - // --- (line: 27) skipped --- - // f3(); -@@= skipped -10, +10 lines =@@ +@@= skipped -17, +19 lines =@@ // f7(); // f8(); From 063c06b87e9c40ec636d337326cfa2f3c0d8cfbd Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Mon, 17 Nov 2025 12:57:25 -0800 Subject: [PATCH 05/12] diff adjustments --- internal/fourslash/baselineutil.go | 25 ++- ...ationMapGoToDefinition.baseline.jsonc.diff | 2 - ...tionRelativeSourceRoot.baseline.jsonc.diff | 2 - ...NameDifferentDirectory.baseline.jsonc.diff | 11 -- ...onMapsOutOfDateMapping.baseline.jsonc.diff | 7 +- ...nitionNameOnEnumMember.baseline.jsonc.diff | 7 +- ...llRefsForDefaultExport.baseline.jsonc.diff | 2 - ...AcrossMultipleProjects.baseline.jsonc.diff | 2 - .../goToDefinitionAlias.baseline.jsonc.diff | 29 --- ...goToDefinitionAmbiants.baseline.jsonc.diff | 46 +---- ...ApparentTypeProperties.baseline.jsonc.diff | 11 -- .../goToDefinitionAwait1.baseline.jsonc.diff | 11 -- .../goToDefinitionAwait3.baseline.jsonc.diff | 5 +- ...itionClassConstructors.baseline.jsonc.diff | 29 +-- ...itionClassStaticBlocks.baseline.jsonc.diff | 4 + ...torOfClassExpression01.baseline.jsonc.diff | 44 +---- ...onConstructorOverloads.baseline.jsonc.diff | 35 +--- ...oToDefinitionDecorator.baseline.jsonc.diff | 11 -- ...tionDecoratorOverloads.baseline.jsonc.diff | 11 -- ...efinitionDifferentFile.baseline.jsonc.diff | 46 +---- ...ifferentFileIndirectly.baseline.jsonc.diff | 46 +---- ...finitionDynamicImport1.baseline.jsonc.diff | 4 +- ...finitionDynamicImport2.baseline.jsonc.diff | 2 - ...efinitionExpandoClass1.baseline.jsonc.diff | 2 - ...efinitionExpandoClass2.baseline.jsonc.diff | 2 - ...ionExternalModuleName3.baseline.jsonc.diff | 2 - ...ionExternalModuleName6.baseline.jsonc.diff | 2 - ...ionExternalModuleName7.baseline.jsonc.diff | 2 - ...ionExternalModuleName8.baseline.jsonc.diff | 2 - ...ionExternalModuleName9.baseline.jsonc.diff | 2 - ...itionFunctionOverloads.baseline.jsonc.diff | 24 +-- ...nctionOverloadsInClass.baseline.jsonc.diff | 9 +- ...DefinitionFunctionType.baseline.jsonc.diff | 22 +-- ...ionImplicitConstructor.baseline.jsonc.diff | 4 +- ...efinitionImportedNames.baseline.jsonc.diff | 2 - ...finitionImportedNames2.baseline.jsonc.diff | 2 - ...finitionImportedNames3.baseline.jsonc.diff | 8 +- ...finitionImportedNames4.baseline.jsonc.diff | 2 - ...finitionImportedNames5.baseline.jsonc.diff | 2 - ...finitionImportedNames6.baseline.jsonc.diff | 2 - ...finitionImportedNames7.baseline.jsonc.diff | 2 - ...finitionImportedNames8.baseline.jsonc.diff | 2 - ...finitionImportedNames9.baseline.jsonc.diff | 2 - .../goToDefinitionImports.baseline.jsonc.diff | 22 --- ...ionInMemberDeclaration.baseline.jsonc.diff | 65 ------ ...finitionInTypeArgument.baseline.jsonc.diff | 18 +- ...finitionIndexSignature.baseline.jsonc.diff | 38 ---- ...oDefinitionInstanceof1.baseline.jsonc.diff | 2 - ...oDefinitionInstanceof2.baseline.jsonc.diff | 2 - ...nterfaceAfterImplement.baseline.jsonc.diff | 7 +- ...initionJsDocImportTag4.baseline.jsonc.diff | 2 - ...initionJsDocImportTag5.baseline.jsonc.diff | 2 - ...initionJsModuleExports.baseline.jsonc.diff | 5 +- ...ModuleNameAtImportName.baseline.jsonc.diff | 12 +- .../goToDefinitionLabels.baseline.jsonc.diff | 29 --- ...DefinitionMetaProperty.baseline.jsonc.diff | 11 -- ...initionMethodOverloads.baseline.jsonc.diff | 43 +--- ...oToDefinitionModifiers.baseline.jsonc.diff | 114 +---------- ...ionMultipleDefinitions.baseline.jsonc.diff | 11 -- ...pressionTargetNotClass.baseline.jsonc.diff | 11 -- ...gElementPropertyName01.baseline.jsonc.diff | 2 - ...bjectLiteralProperties.baseline.jsonc.diff | 46 +---- ...jectLiteralProperties1.baseline.jsonc.diff | 11 -- ...DefinitionObjectSpread.baseline.jsonc.diff | 2 - ...ltiplePropertyAccesses.baseline.jsonc.diff | 2 - ...itionOverriddenMember1.baseline.jsonc.diff | 2 - ...tionOverriddenMember11.baseline.jsonc.diff | 9 +- ...tionOverriddenMember12.baseline.jsonc.diff | 2 - ...tionOverriddenMember13.baseline.jsonc.diff | 2 - ...tionOverriddenMember14.baseline.jsonc.diff | 2 - ...tionOverriddenMember15.baseline.jsonc.diff | 2 - ...itionOverriddenMember2.baseline.jsonc.diff | 2 - ...tionOverriddenMember21.baseline.jsonc.diff | 2 - ...tionOverriddenMember22.baseline.jsonc.diff | 2 - ...tionOverriddenMember23.baseline.jsonc.diff | 2 - ...tionOverriddenMember24.baseline.jsonc.diff | 2 - ...tionOverriddenMember25.baseline.jsonc.diff | 2 - ...tionOverriddenMember26.baseline.jsonc.diff | 2 - ...itionOverriddenMember3.baseline.jsonc.diff | 2 - ...itionOverriddenMember4.baseline.jsonc.diff | 2 - ...itionOverriddenMember5.baseline.jsonc.diff | 2 - ...itionOverriddenMember6.baseline.jsonc.diff | 2 - ...itionOverriddenMember7.baseline.jsonc.diff | 2 - ...itionOverriddenMember9.baseline.jsonc.diff | 2 - ...nPartialImplementation.baseline.jsonc.diff | 2 - ...oDefinitionPrivateName.baseline.jsonc.diff | 20 -- ...tionPropertyAssignment.baseline.jsonc.diff | 11 -- .../goToDefinitionRest.baseline.jsonc.diff | 2 - .../goToDefinitionReturn1.baseline.jsonc.diff | 2 - .../goToDefinitionReturn2.baseline.jsonc.diff | 2 - .../goToDefinitionReturn3.baseline.jsonc.diff | 2 - .../goToDefinitionReturn5.baseline.jsonc.diff | 2 - .../goToDefinitionReturn6.baseline.jsonc.diff | 2 - .../goToDefinitionReturn7.baseline.jsonc.diff | 2 - ...goToDefinitionSameFile.baseline.jsonc.diff | 46 +---- ...onSatisfiesExpression1.baseline.jsonc.diff | 8 +- ...DefinitionScriptImport.baseline.jsonc.diff | 4 +- ...tionScriptImportServer.baseline.jsonc.diff | 4 + ...finitionShadowVariable.baseline.jsonc.diff | 5 +- ...owVariableInsideModule.baseline.jsonc.diff | 4 +- ...ionShorthandProperty01.baseline.jsonc.diff | 23 --- ...ionShorthandProperty03.baseline.jsonc.diff | 11 -- ...ionShorthandProperty06.baseline.jsonc.diff | 2 - ...SignatureAlias_require.baseline.jsonc.diff | 4 +- .../goToDefinitionSimple.baseline.jsonc.diff | 7 +- ...oDefinitionSwitchCase1.baseline.jsonc.diff | 2 - ...oDefinitionSwitchCase2.baseline.jsonc.diff | 2 - ...oDefinitionSwitchCase3.baseline.jsonc.diff | 11 -- ...oDefinitionSwitchCase4.baseline.jsonc.diff | 2 - ...oDefinitionSwitchCase5.baseline.jsonc.diff | 2 - ...oDefinitionSwitchCase6.baseline.jsonc.diff | 9 +- ...oDefinitionSwitchCase7.baseline.jsonc.diff | 2 - ...aggedTemplateOverloads.baseline.jsonc.diff | 11 -- .../goToDefinitionThis.baseline.jsonc.diff | 20 -- ...finitionTypeOnlyImport.baseline.jsonc.diff | 2 - ...efinitionTypePredicate.baseline.jsonc.diff | 11 -- ...ToDefinitionTypeofThis.baseline.jsonc.diff | 20 -- ...tionUnionTypeProperty1.baseline.jsonc.diff | 2 - ...tionUnionTypeProperty2.baseline.jsonc.diff | 2 - ...tionUnionTypeProperty3.baseline.jsonc.diff | 2 - ...tionUnionTypeProperty4.baseline.jsonc.diff | 2 - ...Property_discriminated.baseline.jsonc.diff | 29 --- .../goToDefinitionYield1.baseline.jsonc.diff | 10 +- .../goToDefinitionYield2.baseline.jsonc.diff | 2 - .../goToDefinitionYield3.baseline.jsonc.diff | 5 +- .../goToDefinitionYield4.baseline.jsonc.diff | 2 - ...on_filteringMappedType.baseline.jsonc.diff | 2 - ...oDefinition_mappedType.baseline.jsonc.diff | 2 - .../goToDefinition_super.baseline.jsonc.diff | 20 -- ...finition_untypedModule.baseline.jsonc.diff | 2 - .../goToTypeDefinition4.baseline.jsonc.diff | 2 - ...ionConstructorFunction.baseline.jsonc.diff | 2 - ...nObjectBindingPattern2.baseline.jsonc.diff | 4 +- ...gotoDefinitionLinkTag1.baseline.jsonc.diff | 64 +----- ...gotoDefinitionLinkTag2.baseline.jsonc.diff | 3 +- ...gotoDefinitionLinkTag3.baseline.jsonc.diff | 3 +- ...gotoDefinitionLinkTag4.baseline.jsonc.diff | 3 +- ...gotoDefinitionLinkTag5.baseline.jsonc.diff | 3 +- ...gotoDefinitionLinkTag6.baseline.jsonc.diff | 3 +- ...pressionHeritageClause.baseline.jsonc.diff | 11 -- ...DefinitionSatisfiesTag.baseline.jsonc.diff | 7 +- ...otoDefinitionThrowsTag.baseline.jsonc.diff | 3 +- ...TypeNodeGoToDefinition.baseline.jsonc.diff | 56 ------ .../javaScriptClass3.baseline.jsonc.diff | 11 -- .../jsDocSee1.baseline.jsonc.diff | 47 +---- .../jsDocSee2.baseline.jsonc.diff | 11 -- .../jsDocSee3.baseline.jsonc.diff | 3 +- .../jsDocSee4.baseline.jsonc.diff | 29 +-- ...pedefTagGoToDefinition.baseline.jsonc.diff | 11 -- .../jsxSpreadReference.baseline.jsonc.diff | 2 - .../reallyLargeFile.baseline.jsonc.diff | 3 +- ...xGoToDefinitionClasses.baseline.jsonc.diff | 20 -- ...ToDefinitionIntrinsics.baseline.jsonc.diff | 20 -- ...tionStatelessFunction1.baseline.jsonc.diff | 47 ----- ...tionStatelessFunction2.baseline.jsonc.diff | 47 ----- ...itionUnionElementType1.baseline.jsonc.diff | 2 - ...itionUnionElementType2.baseline.jsonc.diff | 2 - ...entationClassMethod_00.baseline.jsonc.diff | 2 - ...entationClassMethod_01.baseline.jsonc.diff | 11 -- ...oImplementationEnum_00.baseline.jsonc.diff | 2 - ...oImplementationEnum_01.baseline.jsonc.diff | 2 - ...tionInterfaceMethod_00.baseline.jsonc.diff | 11 -- ...tionInterfaceMethod_01.baseline.jsonc.diff | 11 -- ...tionInterfaceMethod_02.baseline.jsonc.diff | 11 -- ...tionInterfaceMethod_03.baseline.jsonc.diff | 2 - ...tionInterfaceMethod_04.baseline.jsonc.diff | 2 - ...tionInterfaceMethod_08.baseline.jsonc.diff | 2 - ...tionInterfaceMethod_09.baseline.jsonc.diff | 6 +- ...tionInterfaceMethod_10.baseline.jsonc.diff | 11 -- ...tionInterfaceMethod_11.baseline.jsonc.diff | 2 - ...onInterfaceProperty_00.baseline.jsonc.diff | 2 - ...onInterfaceProperty_01.baseline.jsonc.diff | 2 - ...ementationInterface_08.baseline.jsonc.diff | 2 - ...ementationInterface_10.baseline.jsonc.diff | 2 - ...ImplementationLocal_00.baseline.jsonc.diff | 2 - ...ImplementationLocal_01.baseline.jsonc.diff | 2 - ...ImplementationLocal_02.baseline.jsonc.diff | 2 - ...ImplementationLocal_03.baseline.jsonc.diff | 2 - ...ImplementationLocal_04.baseline.jsonc.diff | 2 - ...ImplementationLocal_05.baseline.jsonc.diff | 2 - ...ImplementationLocal_06.baseline.jsonc.diff | 2 - ...ImplementationLocal_07.baseline.jsonc.diff | 2 - ...ImplementationLocal_08.baseline.jsonc.diff | 2 - ...ementationNamespace_00.baseline.jsonc.diff | 11 -- ...ementationNamespace_01.baseline.jsonc.diff | 2 - ...ementationNamespace_02.baseline.jsonc.diff | 2 - ...ementationNamespace_05.baseline.jsonc.diff | 20 +- ...dPropertyAssignment_00.baseline.jsonc.diff | 4 +- ...dPropertyAssignment_02.baseline.jsonc.diff | 2 - ...oImplementationThis_00.baseline.jsonc.diff | 2 - ...oImplementationThis_01.baseline.jsonc.diff | 2 - ...ation_inDifferentFiles.baseline.jsonc.diff | 2 - .../implementation01.baseline.jsonc.diff | 2 - .../goToTypeDefinition.baseline.jsonc.diff | 2 - .../goToTypeDefinition3.baseline.jsonc.diff | 2 - ...oTypeDefinitionAliases.baseline.jsonc.diff | 11 -- ...eDefinitionEnumMembers.baseline.jsonc.diff | 2 - ...peDefinitionImportMeta.baseline.jsonc.diff | 2 - ...ypeDefinitionModifiers.baseline.jsonc.diff | 185 +++++------------- ...ToTypeDefinitionModule.baseline.jsonc.diff | 11 -- ...ypeDefinitionUnionType.baseline.jsonc.diff | 2 - ...oToTypeDefinition_Pick.baseline.jsonc.diff | 3 +- ...peDefinition_arrayType.baseline.jsonc.diff | 15 +- ...Definition_promiseType.baseline.jsonc.diff | 6 +- ...eDefinition_returnType.baseline.jsonc.diff | 66 +------ ...finition_typeReference.baseline.jsonc.diff | 2 - .../typedefinition01.baseline.jsonc.diff | 2 - 207 files changed, 208 insertions(+), 2004 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 4acc0053a8..3bcb76f443 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -253,11 +253,13 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio serverTestFilePrefix := "/server" contextSpanOpening := "<|" contextSpanClosing := "|>" + oldGoToDefCommand := "getDefinitionAtPosition" replacer := strings.NewReplacer( contextSpanOpening, "", contextSpanClosing, "", testFilePrefix, "", serverTestFilePrefix, "", + oldGoToDefCommand, string(goToDefinitionCmd), ) var defIdRegex = regexp.MustCompile(`{\| defId: [0-9]+ \|}`) detailsStr := "// === Details ===" @@ -270,19 +272,26 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio isInDetails = false commandName := matches[1] if commandName == string(command) || - command == goToDefinitionCmd && commandName == "getDefinitionAtPosition" { + command == goToDefinitionCmd && commandName == oldGoToDefCommand { isInCommand = true } else { isInCommand = false } - } else if strings.Contains(line, detailsStr) { - isInDetails = true } - // We don't diff the details section, since the structure of responses is different. - if isInCommand && !isInDetails { - fixedLine := replacer.Replace(line) - fixedLine = defIdRegex.ReplaceAllString(fixedLine, "") - commandLines = append(commandLines, fixedLine) + if isInCommand { + if strings.Contains(line, detailsStr) { + // Drop blank line before details + commandLines = commandLines[:len(commandLines)-1] + isInDetails = true + } + // We don't diff the details section, since the structure of responses is different. + if !isInDetails { + fixedLine := replacer.Replace(line) + fixedLine = defIdRegex.ReplaceAllString(fixedLine, "") + commandLines = append(commandLines, fixedLine) + } else if line == " ]" { + isInDetails = false + } } } return strings.Join(commandLines, "\n") diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff deleted file mode 100644 index 28ddff46b2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapGoToDefinition.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.declarationMapGoToDefinition.baseline.jsonc -+++ new.declarationMapGoToDefinition.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff deleted file mode 100644 index 09f6861c7c..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc -+++ new.declarationMapsGoToDefinitionRelativeSourceRoot.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff deleted file mode 100644 index 24be20c459..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc -+++ new.declarationMapsGoToDefinitionSameNameDifferentDirectory.baseline.jsonc -@@= skipped -14, +14 lines =@@ - // // vvvvv - // --- (line: 7) skipped --- - -+ -+ - // === goToDefinition === - // === /BaseClass/Source.ts === - // class Control{ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff index 440d955c03..898d9535d9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff @@ -1,11 +1,6 @@ --- old.declarationMapsOutOfDateMapping.baseline.jsonc +++ new.declarationMapsOutOfDateMapping.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /home/src/workspaces/project/node_modules/a/src/index.ts === - // export class [|Foo|] { - // } +@@= skipped -4, +4 lines =@@ // // === /home/src/workspaces/project/index.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff index 7f88fe866d..6f206248a9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff @@ -1,11 +1,6 @@ --- old.definitionNameOnEnumMember.baseline.jsonc +++ new.definitionNameOnEnumMember.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /definitionNameOnEnumMember.ts === - // enum e { - // firstMember, +@@= skipped -4, +4 lines =@@ // secondMember, // [|thirdMember|] // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff deleted file mode 100644 index 363de6cb92..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.findAllRefsForDefaultExport.baseline.jsonc -+++ new.findAllRefsForDefaultExport.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff deleted file mode 100644 index f7329e53f4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionAcrossMultipleProjects.baseline.jsonc -+++ new.goToDefinitionAcrossMultipleProjects.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff deleted file mode 100644 index 9cdd0fd608..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc.diff +++ /dev/null @@ -1,29 +0,0 @@ ---- old.goToDefinitionAlias.baseline.jsonc -+++ new.goToDefinitionAlias.baseline.jsonc -@@= skipped -12, +12 lines =@@ - // var v1 = new alias1.Foo(); - // var v2 = new Module.alias2.Foo(); - -+ -+ - // === goToDefinition === - // === /b.ts === - // import [|alias1|] = require("fileb"); -@@= skipped -15, +17 lines =@@ - // var v1 = new /*GOTO DEF*/alias1.Foo(); - // var v2 = new Module.alias2.Foo(); - -+ -+ - // === goToDefinition === - // === /b.ts === - // import alias1 = require("fileb"); -@@= skipped -14, +16 lines =@@ - // // Value posistion - // var v1 = new alias1.Foo(); - // var v2 = new Module.alias2.Foo(); -+ -+ - - // === goToDefinition === - // === /b.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff index 03a6fc31d3..bd4b99d8cc 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff @@ -1,11 +1,5 @@ --- old.goToDefinitionAmbiants.baseline.jsonc +++ new.goToDefinitionAmbiants.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /goToDefinitionAmbiants.ts === - // declare var [|ambientVar|]; - // declare function ambientFunction(); @@= skipped -7, +7 lines =@@ // public method(); // } @@ -15,16 +9,7 @@ // ambientFunction(); // var ambientClassVariable = new ambientClass(); // ambientClass.method(); - // ambientClassVariable.method(); - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionAmbiants.ts === - // declare var ambientVar; - // declare function [|ambientFunction|](); -@@= skipped -17, +19 lines =@@ +@@= skipped -19, +19 lines =@@ // } // // ambientVar = 1; @@ -33,15 +18,7 @@ // var ambientClassVariable = new ambientClass(); // ambientClass.method(); // ambientClassVariable.method(); - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionAmbiants.ts === - // declare var ambientVar; - // declare function ambientFunction(); -@@= skipped -17, +19 lines =@@ +@@= skipped -19, +19 lines =@@ // // ambientVar = 1; // ambientFunction(); @@ -50,14 +27,7 @@ // ambientClass.method(); // ambientClassVariable.method(); --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionAmbiants.ts === - // declare var ambientVar; - // declare function ambientFunction(); -@@= skipped -17, +19 lines =@@ +@@= skipped -19, +19 lines =@@ // ambientVar = 1; // ambientFunction(); // var ambientClassVariable = new ambientClass(); @@ -65,14 +35,8 @@ +// ambientClass./*GOTO DEF*/method(); // ambientClassVariable.method(); --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionAmbiants.ts === - // declare var ambientVar; - // declare function ambientFunction(); -@@= skipped -17, +19 lines =@@ + +@@= skipped -19, +19 lines =@@ // ambientFunction(); // var ambientClassVariable = new ambientClass(); // ambientClass.method(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff deleted file mode 100644 index 17e4f4cd74..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionApparentTypeProperties.baseline.jsonc -+++ new.goToDefinitionApparentTypeProperties.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // o./*GOTO DEF*/myObjectMethod(); - // o["myObjectMethod"](); - -+ -+ - // === goToDefinition === - // === /goToDefinitionApparentTypeProperties.ts === - // interface Number { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff deleted file mode 100644 index 3f3f0ba001..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionAwait1.baseline.jsonc -+++ new.goToDefinitionAwait1.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // await Promise.resolve(0); - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionAwait1.ts === - // async function foo() { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff index ec8d29f23c..cc5c8ffd99 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff @@ -8,8 +8,5 @@ -// } -// } +// --- (line: 7) skipped --- -+ -+ - // === goToDefinition === - // === /goToDefinitionAwait3.ts === \ No newline at end of file + diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff index a3b8b15c2c..7c68849da3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff @@ -1,33 +1,6 @@ --- old.goToDefinitionClassConstructors.baseline.jsonc +++ new.goToDefinitionClassConstructors.baseline.jsonc -@@= skipped -12, +12 lines =@@ - // import { Derived } from './definitions' - // const derived = new /*GOTO DEF*/[|Derived|](cArg) - -+ -+ - // === goToDefinition === - // === /defInSameFile.ts === - // import { Base } from './definitions' -@@= skipped -17, +19 lines =@@ - // export class Derived extends Base { - // --- (line: 6) skipped --- - -+ -+ - // === goToDefinition === - // === /hasConstructor.ts === - // import { Base } from './definitions' -@@= skipped -9, +11 lines =@@ - // } - // const hasConstructor = new /*GOTO DEF*/HasConstructor(cArg) - -+ -+ - // === goToDefinition === - // === /definitions.ts === - // export class [|Base|] { -@@= skipped -7, +9 lines =@@ +@@= skipped -51, +51 lines =@@ // } // // export class Derived extends Base { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff index 75115f25c1..3d960818bf 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff @@ -11,6 +11,8 @@ -// [|static|] {} -// } - +- +- -// === goToDefinition === -// === /goToDefinitionClassStaticBlocks.ts === -// class ClassStaticBocks { @@ -22,6 +24,8 @@ -// [|static|] {} -// } - +- +- -// === goToDefinition === -// === /goToDefinitionClassStaticBlocks.ts === -// class ClassStaticBocks { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff index b212f129fd..310e9a478f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff @@ -7,24 +7,20 @@ -// constructor() { -// --- (line: 9) skipped --- +// --- (line: 8) skipped --- -+ -+ - // === goToDefinition === - // === /goToDefinitionConstructorOfClassExpression01.ts === -@@= skipped -17, +18 lines =@@ + + +@@= skipped -19, +18 lines =@@ // } // var z = class C extends x { // m() { -// return new C; -// --- (line: 16) skipped --- +// --- (line: 15) skipped --- -+ -+ - // === goToDefinition === - // === /goToDefinitionConstructorOfClassExpression01.ts === -@@= skipped -23, +24 lines =@@ + + +@@= skipped -25, +24 lines =@@ // } // } // @@ -33,12 +29,10 @@ -// var y1 = new y(); -// var z1 = new z(); +// --- (line: 19) skipped --- -+ -+ - // === goToDefinition === - // === /goToDefinitionConstructorOfClassExpression01.ts === -@@= skipped -27, +26 lines =@@ + + +@@= skipped -29, +26 lines =@@ // } // // var y = class C extends x { @@ -47,22 +41,4 @@ +// --- (line: 8) skipped --- // --- (line: 16) skipped --- - // } -@@= skipped -11, +10 lines =@@ - // var y1 = new y(); - // var z1 = new z(); - -+ -+ - // === goToDefinition === - // === /goToDefinitionConstructorOfClassExpression01.ts === - // --- (line: 3) skipped --- -@@= skipped -22, +24 lines =@@ - // var x2 = new x(); - // var y1 = new /*GOTO DEF*/y(); - // var z1 = new z(); -+ -+ - - // === goToDefinition === - // === /goToDefinitionConstructorOfClassExpression01.ts === \ No newline at end of file + // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff index 7722c97af7..9231475d1f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc.diff @@ -1,20 +1,6 @@ --- old.goToDefinitionConstructorOverloads.baseline.jsonc +++ new.goToDefinitionConstructorOverloads.baseline.jsonc -@@= skipped -11, +11 lines =@@ - // class Extended extends ConstructorOverload { - // --- (line: 11) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionConstructorOverloads.ts === - // class [|ConstructorOverload|] { -@@= skipped -15, +17 lines =@@ - // readonly name = "extended"; - // --- (line: 12) skipped --- - -+ -+ +@@= skipped -33, +33 lines =@@ // === goToDefinition === // === /goToDefinitionConstructorOverloads.ts === // class ConstructorOverload { @@ -24,21 +10,4 @@ +// [|constructor(foo: string);|] // [|constructor(foo: any) { }|] // } - // - // var constructorOverload = new ConstructorOverload(); - // --- (line: 8) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionConstructorOverloads.ts === - // class ConstructorOverload { -@@= skipped -27, +31 lines =@@ - // } - // var extended1 = new /*GOTO DEF*/Extended(); - // var extended2 = new Extended("foo"); -+ -+ - - // === goToDefinition === - // === /goToDefinitionConstructorOverloads.ts === \ No newline at end of file + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff deleted file mode 100644 index f4470b6007..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionDecorator.baseline.jsonc -+++ new.goToDefinitionDecorator.baseline.jsonc -@@= skipped -13, +13 lines =@@ - // method() {} - // } - -+ -+ - // === goToDefinition === - // === /a.ts === - // function decorator(target) { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff deleted file mode 100644 index 95f70f24c2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionDecoratorOverloads.baseline.jsonc -+++ new.goToDefinitionDecoratorOverloads.baseline.jsonc -@@= skipped -11, +11 lines =@@ - // @dec [s]() {} - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionDecoratorOverloads.ts === - // async function f() {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff index b33b5d06b1..24dfcaa5a2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff @@ -1,11 +1,5 @@ --- old.goToDefinitionDifferentFile.baseline.jsonc +++ new.goToDefinitionDifferentFile.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /goToDefinitionDifferentFile_Definition.ts === - // var [|remoteVariable|]; - // function remoteFunction() { } @@= skipped -6, +6 lines =@@ // module remoteModule{ export var foo = 1;} @@ -15,16 +9,7 @@ // remoteFunction(); // var foo = new remoteClass(); // class fooCls implements remoteInterface { } - // var fooVar = remoteModule.foo; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionDifferentFile_Definition.ts === - // var remoteVariable; - // function [|remoteFunction|]() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // === /goToDefinitionDifferentFile_Consumption.ts === // remoteVariable = 1; @@ -33,15 +18,7 @@ // var foo = new remoteClass(); // class fooCls implements remoteInterface { } // var fooVar = remoteModule.foo; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionDifferentFile_Definition.ts === - // var remoteVariable; - // function remoteFunction() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // === /goToDefinitionDifferentFile_Consumption.ts === // remoteVariable = 1; // remoteFunction(); @@ -50,14 +27,7 @@ // class fooCls implements remoteInterface { } // var fooVar = remoteModule.foo; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionDifferentFile_Definition.ts === - // var remoteVariable; - // function remoteFunction() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // remoteVariable = 1; // remoteFunction(); // var foo = new remoteClass(); @@ -65,14 +35,8 @@ +// class fooCls implements /*GOTO DEF*/remoteInterface { } // var fooVar = remoteModule.foo; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionDifferentFile_Definition.ts === - // var remoteVariable; - // function remoteFunction() { } -@@= skipped -16, +18 lines =@@ + +@@= skipped -18, +18 lines =@@ // remoteFunction(); // var foo = new remoteClass(); // class fooCls implements remoteInterface { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff index 16d769604b..d99338e37c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff @@ -1,11 +1,5 @@ --- old.goToDefinitionDifferentFileIndirectly.baseline.jsonc +++ new.goToDefinitionDifferentFileIndirectly.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /Remote2.ts === - // var [|rem2Var|]; - // function rem2Fn() { } @@= skipped -6, +6 lines =@@ // module rem2Mod { export var foo; } @@ -15,16 +9,7 @@ // rem2Fn(); // var rem2foo = new rem2Cls(); // class rem2fooCls implements rem2Int { } - // var rem2fooVar = rem2Mod.foo; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /Remote2.ts === - // var rem2Var; - // function [|rem2Fn|]() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // === /Definition.ts === // rem2Var = 1; @@ -33,15 +18,7 @@ // var rem2foo = new rem2Cls(); // class rem2fooCls implements rem2Int { } // var rem2fooVar = rem2Mod.foo; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /Remote2.ts === - // var rem2Var; - // function rem2Fn() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // === /Definition.ts === // rem2Var = 1; // rem2Fn(); @@ -50,14 +27,7 @@ // class rem2fooCls implements rem2Int { } // var rem2fooVar = rem2Mod.foo; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /Remote2.ts === - // var rem2Var; - // function rem2Fn() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // rem2Var = 1; // rem2Fn(); // var rem2foo = new rem2Cls(); @@ -65,14 +35,8 @@ +// class rem2fooCls implements /*GOTO DEF*/rem2Int { } // var rem2fooVar = rem2Mod.foo; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /Remote2.ts === - // var rem2Var; - // function rem2Fn() { } -@@= skipped -16, +18 lines =@@ + +@@= skipped -18, +18 lines =@@ // rem2Fn(); // var rem2foo = new rem2Cls(); // class rem2fooCls implements rem2Int { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff index e9e19b64a5..d18d4e0e54 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport1.baseline.jsonc.diff @@ -8,8 +8,8 @@ // import("./f/*GOTO DEF*/oo") -// var x = import("./foo") +// var x = import("./foo")|] -+ -+ + + // === goToDefinition === // === /foo.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff deleted file mode 100644 index 4208658085..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionDynamicImport2.baseline.jsonc -+++ new.goToDefinitionDynamicImport2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff deleted file mode 100644 index 26f0f785a6..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionExpandoClass1.baseline.jsonc -+++ new.goToDefinitionExpandoClass1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff deleted file mode 100644 index 326f915101..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionExpandoClass2.baseline.jsonc -+++ new.goToDefinitionExpandoClass2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff deleted file mode 100644 index aa5bcb6a44..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionExternalModuleName3.baseline.jsonc -+++ new.goToDefinitionExternalModuleName3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff deleted file mode 100644 index bf095a19ca..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionExternalModuleName6.baseline.jsonc -+++ new.goToDefinitionExternalModuleName6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff deleted file mode 100644 index 5feed253e6..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionExternalModuleName7.baseline.jsonc -+++ new.goToDefinitionExternalModuleName7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff deleted file mode 100644 index ef3a497929..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionExternalModuleName8.baseline.jsonc -+++ new.goToDefinitionExternalModuleName8.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff deleted file mode 100644 index 3a722bed28..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionExternalModuleName9.baseline.jsonc -+++ new.goToDefinitionExternalModuleName9.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff index 2e4fbda436..738bb5d4e6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff @@ -1,29 +1,7 @@ --- old.goToDefinitionFunctionOverloads.baseline.jsonc +++ new.goToDefinitionFunctionOverloads.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // functionOverload("123"); - // functionOverload({}); +@@= skipped -35, +35 lines =@@ -+ -+ - // === goToDefinition === - // === /goToDefinitionFunctionOverloads.ts === - // function functionOverload(value: number); -@@= skipped -10, +12 lines =@@ - // /*GOTO DEF*/functionOverload("123"); - // functionOverload({}); - -+ -+ - // === goToDefinition === - // === /goToDefinitionFunctionOverloads.ts === - // function [|functionOverload|](value: number); -@@= skipped -10, +12 lines =@@ - // functionOverload("123"); - // /*GOTO DEF*/functionOverload({}); - -+ -+ // === goToDefinition === // === /goToDefinitionFunctionOverloads.ts === -// function /*GOTO DEF*/functionOverload(value: number); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff index 7110c46b00..da5b22c4df 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff @@ -11,14 +11,7 @@ // static [|fnOverload|](foo: any) { } // public fnOverload(): any; // public fnOverload(foo: string); - // public fnOverload(foo: any) { return "foo" } - // --- (line: 8) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionFunctionOverloadsInClass.ts === - // class clsInOverload { +@@= skipped -16, +16 lines =@@ // static fnOverload(); // static fnOverload(foo: string); // static fnOverload(foo: any) { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff index 27d77419c6..87f81c6155 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.goToDefinitionFunctionType.baseline.jsonc +++ new.goToDefinitionFunctionType.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /goToDefinitionFunctionType.ts === // const [|c|]: () => void; -// /*GOTO DEF POS*/c(); @@ -10,13 +9,7 @@ // function test(cb: () => void) { // cb(); // } - // --- (line: 6) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionFunctionType.ts === +@@= skipped -13, +13 lines =@@ // const c: () => void; // c(); // function test([|cb|]: () => void) { @@ -25,16 +18,7 @@ // } // class C { // prop: () => void; - // --- (line: 8) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionFunctionType.ts === - // --- (line: 3) skipped --- - // cb(); -@@= skipped -25, +29 lines =@@ +@@= skipped -16, +16 lines =@@ // class C { // [|prop|]: () => void; // m() { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff index 5ea9bda7e3..518fab1389 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff @@ -1,8 +1,6 @@ --- old.goToDefinitionImplicitConstructor.baseline.jsonc +++ new.goToDefinitionImplicitConstructor.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === +@@= skipped -1, +1 lines =@@ // === /goToDefinitionImplicitConstructor.ts === // class [|ImplicitConstructor|] { // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff deleted file mode 100644 index 6f0b8616e3..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames.baseline.jsonc -+++ new.goToDefinitionImportedNames.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff deleted file mode 100644 index 78e6c001f6..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames2.baseline.jsonc -+++ new.goToDefinitionImportedNames2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff index 0353ad8cd1..bc5c47278e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc.diff @@ -8,12 +8,10 @@ -// var c = new /*GOTO DEF*/[|C|](); +// import {M, C, I} from "./d"; +// var c = new /*GOTO DEF*/[|C|](); -+ -+ - // === goToDefinition === - // === /a.ts === -@@= skipped -15, +17 lines =@@ + + +@@= skipped -17, +17 lines =@@ // } // === /e.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff deleted file mode 100644 index b76048bbc8..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames4.baseline.jsonc -+++ new.goToDefinitionImportedNames4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff deleted file mode 100644 index e2e065b439..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames5.baseline.jsonc -+++ new.goToDefinitionImportedNames5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff deleted file mode 100644 index e684f37605..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames6.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames6.baseline.jsonc -+++ new.goToDefinitionImportedNames6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff deleted file mode 100644 index 48b0105ddd..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames7.baseline.jsonc -+++ new.goToDefinitionImportedNames7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff deleted file mode 100644 index 2f9b1acd25..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames8.baseline.jsonc -+++ new.goToDefinitionImportedNames8.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff deleted file mode 100644 index 3e609bc487..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionImportedNames9.baseline.jsonc -+++ new.goToDefinitionImportedNames9.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff index 5111564150..8ffc255d3e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff @@ -16,26 +16,4 @@ -// /*GOTO DEF*/a; +// /*GOTO DEF*/[|a|]; // b; -+ -+ - // === goToDefinition === - // === /a.ts === -@@= skipped -21, +27 lines =@@ - // a; - // b; - -+ -+ - // === goToDefinition === - // === /a.ts === - // export default function f() {} -@@= skipped -13, +15 lines =@@ - // /*GOTO DEF*/[|x|]; - // a; - // b; -+ -+ - - // === goToDefinition === - // === /b.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff deleted file mode 100644 index cb584feca3..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc.diff +++ /dev/null @@ -1,65 +0,0 @@ ---- old.goToDefinitionInMemberDeclaration.baseline.jsonc -+++ new.goToDefinitionInMemberDeclaration.baseline.jsonc -@@= skipped -14, +14 lines =@@ - // public _enum: Enum = Enum.value1; - // --- (line: 14) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionInMemberDeclaration.ts === - // interface [|IFoo|] { method1(): number; } -@@= skipped -18, +20 lines =@@ - // - // --- (line: 16) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionInMemberDeclaration.ts === - // interface [|IFoo|] { method1(): number; } -@@= skipped -16, +18 lines =@@ - // } - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionInMemberDeclaration.ts === - // interface IFoo { method1(): number; } -@@= skipped -18, +20 lines =@@ - // public _self: Bar; - // --- (line: 15) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionInMemberDeclaration.ts === - // interface IFoo { method1(): number; } -@@= skipped -17, +19 lines =@@ - // public _enum: Enum = Enum.value1; - // --- (line: 14) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionInMemberDeclaration.ts === - // --- (line: 3) skipped --- -@@= skipped -19, +21 lines =@@ - // } - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionInMemberDeclaration.ts === - // --- (line: 3) skipped --- -@@= skipped -18, +20 lines =@@ - // constructor(public _inConstructor: IFoo) { - // } - // } -+ -+ - - // === goToDefinition === - // === /goToDefinitionInMemberDeclaration.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff index 8190c4be53..1b9e9814e2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff @@ -1,23 +1,15 @@ --- old.goToDefinitionInTypeArgument.baseline.jsonc +++ new.goToDefinitionInTypeArgument.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /goToDefinitionInTypeArgument.ts === - // class Foo { } +@@= skipped -3, +3 lines =@@ // // class [|Bar|] { } // -// var x = new Foo(); -- --// === getDefinitionAtPosition === +// var x = new Foo(); -+ -+ -+ -+// === goToDefinition === - // === /goToDefinitionInTypeArgument.ts === - // class [|Foo|] { } + + + +@@= skipped -10, +10 lines =@@ // // class Bar { } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff deleted file mode 100644 index 267f553d42..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionIndexSignature.baseline.jsonc.diff +++ /dev/null @@ -1,38 +0,0 @@ ---- old.goToDefinitionIndexSignature.baseline.jsonc -+++ new.goToDefinitionIndexSignature.baseline.jsonc -@@= skipped -16, +16 lines =@@ - // declare const k: K; - // --- (line: 16) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionIndexSignature.ts === - // interface I { -@@= skipped -21, +23 lines =@@ - // k.b; - // k.ab; - -+ -+ - // === goToDefinition === - // === /goToDefinitionIndexSignature.ts === - // --- (line: 4) skipped --- -@@= skipped -18, +20 lines =@@ - // k.b; - // k.ab; - -+ -+ - // === goToDefinition === - // === /goToDefinitionIndexSignature.ts === - // --- (line: 5) skipped --- -@@= skipped -16, +18 lines =@@ - // k.a; - // k./*GOTO DEF*/b; - // k.ab; -+ -+ - - // === goToDefinition === - // === /goToDefinitionIndexSignature.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff deleted file mode 100644 index 12c0dd7aa1..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionInstanceof1.baseline.jsonc -+++ new.goToDefinitionInstanceof1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff deleted file mode 100644 index d84e03c6b6..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionInstanceof2.baseline.jsonc -+++ new.goToDefinitionInstanceof2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff index 4f13f5e2c5..4cab51dcee 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff @@ -1,11 +1,6 @@ --- old.goToDefinitionInterfaceAfterImplement.baseline.jsonc +++ new.goToDefinitionInterfaceAfterImplement.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /goToDefinitionInterfaceAfterImplement.ts === - // interface [|sInt|] { - // sVar: number; +@@= skipped -4, +4 lines =@@ // sFn: () => void; // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff deleted file mode 100644 index b7c17cb121..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionJsDocImportTag4.baseline.jsonc -+++ new.goToDefinitionJsDocImportTag4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff deleted file mode 100644 index fb406ad330..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionJsDocImportTag5.baseline.jsonc -+++ new.goToDefinitionJsDocImportTag5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff index d9f3621494..5fd950c286 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff @@ -8,10 +8,7 @@ // x./*GOTO DEF*/test(); // x.test3 = function () { } // x.test3(); - -+ -+ - // === goToDefinition === +@@= skipped -10, +10 lines =@@ // === /foo.js === // x.test = () => { } // x.test(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff index 827fd960e6..ecbbbbea03 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleNameAtImportName.baseline.jsonc.diff @@ -16,10 +16,8 @@ // === /bar.js === // const /*GOTO DEF*/[|BlahModule|] = require("./foo.js"); - // new BlahModule.Blah() +@@= skipped -13, +13 lines =@@ -+ -+ // === goToDefinition === // === /foo.js === -// [|function notExported() { } @@ -35,10 +33,8 @@ // === /bar.js === // const BlahModule = require("./foo.js"); - // new /*GOTO DEF*/[|BlahModule|].Blah() +@@= skipped -14, +14 lines =@@ -+ -+ // === goToDefinition === // === /foo.js === -// [|function notExported() { } @@ -54,10 +50,8 @@ // === /barTs.ts === // import /*GOTO DEF*/[|BlahModule|] = require("./foo.js"); - // new BlahModule.Blah() +@@= skipped -14, +14 lines =@@ -+ -+ // === goToDefinition === // === /foo.js === -// [|function notExported() { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff deleted file mode 100644 index 39d131df77..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionLabels.baseline.jsonc.diff +++ /dev/null @@ -1,29 +0,0 @@ ---- old.goToDefinitionLabels.baseline.jsonc -+++ new.goToDefinitionLabels.baseline.jsonc -@@= skipped -8, +8 lines =@@ - // } - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionLabels.ts === - // label1: while (true) { -@@= skipped -11, +13 lines =@@ - // } - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionLabels.ts === - // [|label1|]: while (true) { -@@= skipped -10, +12 lines =@@ - // continue unknownLabel; - // } - // } -+ -+ - - // === goToDefinition === - // === /goToDefinitionLabels.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff deleted file mode 100644 index 759fec02d4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionMetaProperty.baseline.jsonc -+++ new.goToDefinitionMetaProperty.baseline.jsonc -@@= skipped -23, +23 lines =@@ - // import.meta; - // function [|f|]() { new.t/*GOTO DEF*/arget; } - -+ -+ - // === goToDefinition === - // === /b.ts === - // im/*GOTO DEF*/port.m; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff index 61a6720b82..c7e6e8bfe3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff @@ -1,38 +1,6 @@ --- old.goToDefinitionMethodOverloads.baseline.jsonc +++ new.goToDefinitionMethodOverloads.baseline.jsonc -@@= skipped -15, +15 lines =@@ - // methodOverload.method(); - // methodOverload.method("456"); - -+ -+ - // === goToDefinition === - // === /goToDefinitionMethodOverloads.ts === - // class MethodOverload { -@@= skipped -18, +20 lines =@@ - // methodOverload.method(); - // methodOverload.method("456"); - -+ -+ - // === goToDefinition === - // === /goToDefinitionMethodOverloads.ts === - // class MethodOverload { -@@= skipped -18, +20 lines =@@ - // methodOverload./*GOTO DEF*/method(); - // methodOverload.method("456"); - -+ -+ - // === goToDefinition === - // === /goToDefinitionMethodOverloads.ts === - // class MethodOverload { -@@= skipped -18, +20 lines =@@ - // methodOverload.method(); - // methodOverload./*GOTO DEF*/method("456"); - -+ -+ +@@= skipped -80, +80 lines =@@ // === goToDefinition === // === /goToDefinitionMethodOverloads.ts === // class MethodOverload { @@ -43,14 +11,7 @@ // static [|method|](foo?: any) { } // public method(): any; // public method(foo: string); - // public method(foo?: any) { return "foo" } - // --- (line: 8) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionMethodOverloads.ts === - // class MethodOverload { +@@= skipped -16, +16 lines =@@ // static method(); // static method(foo: string); // static method(foo?: any) { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff index f1ab87eafd..5ac8a743fe 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff @@ -15,8 +15,8 @@ -// -// export function foo() { } +// --- (line: 5) skipped --- -+ -+ + + // === goToDefinition === // === /a.ts === @@ -36,18 +36,10 @@ -// -// export function foo() { } +// --- (line: 5) skipped --- -+ -+ - // === goToDefinition === - // === /a.ts === -@@= skipped -38, +24 lines =@@ - // - // --- (line: 7) skipped --- -+ -+ - // === goToDefinition === + +@@= skipped -48, +30 lines =@@ // === /a.ts === // export class A { // @@ -56,21 +48,7 @@ // // readonly x: string; // - // --- (line: 7) skipped --- -+ -+ - - // === goToDefinition === - // === /a.ts === -@@= skipped -22, +26 lines =@@ - // - // --- (line: 9) skipped --- - -+ -+ - // === goToDefinition === - // === /a.ts === - // export class A { +@@= skipped -28, +28 lines =@@ // // private z: string; // @@ -79,21 +57,7 @@ // // async a() { } // - // --- (line: 9) skipped --- -+ -+ - - // === goToDefinition === - // === /a.ts === -@@= skipped -24, +28 lines =@@ - // - // --- (line: 11) skipped --- - -+ -+ - // === goToDefinition === - // === /a.ts === - // --- (line: 3) skipped --- +@@= skipped -28, +28 lines =@@ // // readonly x: string; // @@ -102,21 +66,7 @@ // // override b() {} // - // --- (line: 11) skipped --- -+ -+ - - // === goToDefinition === - // === /a.ts === -@@= skipped -25, +29 lines =@@ - // - // export function foo() { } - -+ -+ - // === goToDefinition === - // === /a.ts === - // --- (line: 5) skipped --- +@@= skipped -29, +29 lines =@@ // // async a() { } // @@ -125,40 +75,7 @@ // // public async c() { } // } - // - // export function foo() { } -+ -+ - - // === goToDefinition === - // === /a.ts === -@@= skipped -24, +28 lines =@@ - // - // export function foo() { } - -+ -+ - // === goToDefinition === - // === /a.ts === - // --- (line: 7) skipped --- -@@= skipped -11, +13 lines =@@ - // - // export function foo() { } - -+ -+ - // === goToDefinition === - // === /a.ts === - // --- (line: 7) skipped --- -@@= skipped -11, +13 lines =@@ - // - // export function foo() { } - -+ -+ - // === goToDefinition === - // === /a.ts === - // --- (line: 7) skipped --- +@@= skipped -54, +54 lines =@@ // // override b() {} // @@ -167,20 +84,7 @@ // } // // export function foo() { } -+ -+ - - // === goToDefinition === - // === /a.ts === -@@= skipped -19, +23 lines =@@ - // - // exp/*GOTO DEF*/ort function [|foo|]() { } - -+ -+ - // === goToDefinition === - // === /a.ts === - // --- (line: 10) skipped --- +@@= skipped -23, +23 lines =@@ // public async c() { } // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff deleted file mode 100644 index 33e2a8fec1..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionMultipleDefinitions.baseline.jsonc -+++ new.goToDefinitionMultipleDefinitions.baseline.jsonc -@@= skipped -14, +14 lines =@@ - // - // var ifoo: IFo/*GOTO DEF*/o; - -+ -+ - // === goToDefinition === - // === /c.ts === - // module [|Module|] { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff deleted file mode 100644 index 36db31a3e4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionNewExpressionTargetNotClass.baseline.jsonc -+++ new.goToDefinitionNewExpressionTargetNotClass.baseline.jsonc -@@= skipped -9, +9 lines =@@ - // }; - // new I2(); - -+ -+ - // === goToDefinition === - // === /goToDefinitionNewExpressionTargetNotClass.ts === - // --- (line: 3) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff deleted file mode 100644 index 69340ae062..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc -+++ new.goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff index 11c0fd32f6..4ec56db94a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff @@ -1,11 +1,5 @@ --- old.goToDefinitionObjectLiteralProperties.baseline.jsonc +++ new.goToDefinitionObjectLiteralProperties.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /goToDefinitionObjectLiteralProperties.ts === - // var o = { - // [|value|]: 0, @@= skipped -7, +7 lines =@@ // es6StyleMethod() { } // }; @@ -15,16 +9,7 @@ // o.getter; // o.setter; // o.method; - // o.es6StyleMethod; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionObjectLiteralProperties.ts === - // var o = { - // value: 0, -@@= skipped -17, +19 lines =@@ +@@= skipped -19, +19 lines =@@ // }; // // o.value; @@ -33,15 +18,7 @@ // o.setter; // o.method; // o.es6StyleMethod; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionObjectLiteralProperties.ts === - // var o = { - // value: 0, -@@= skipped -17, +19 lines =@@ +@@= skipped -19, +19 lines =@@ // // o.value; // o.getter; @@ -50,14 +27,7 @@ // o.method; // o.es6StyleMethod; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionObjectLiteralProperties.ts === - // var o = { - // value: 0, -@@= skipped -17, +19 lines =@@ +@@= skipped -19, +19 lines =@@ // o.value; // o.getter; // o.setter; @@ -65,14 +35,8 @@ +// o./*GOTO DEF*/method; // o.es6StyleMethod; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionObjectLiteralProperties.ts === - // var o = { - // value: 0, -@@= skipped -17, +19 lines =@@ + +@@= skipped -19, +19 lines =@@ // o.getter; // o.setter; // o.method; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff deleted file mode 100644 index 331d1a126c..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionObjectLiteralProperties1.baseline.jsonc -+++ new.goToDefinitionObjectLiteralProperties1.baseline.jsonc -@@= skipped -11, +11 lines =@@ - // propx: 10 - // }) - -+ -+ - // === goToDefinition === - // === /goToDefinitionObjectLiteralProperties1.ts === - // interface PropsBag { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff deleted file mode 100644 index b1870db4d2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionObjectSpread.baseline.jsonc -+++ new.goToDefinitionObjectSpread.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff deleted file mode 100644 index 4f2e92d135..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc -+++ new.goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff deleted file mode 100644 index b95133f957..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember1.baseline.jsonc -+++ new.goToDefinitionOverriddenMember1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff index 1113a9f7ff..d0c9133718 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff @@ -8,11 +8,4 @@ +// m() {} // } // class Bar extends Foo { - // /** @over/*GOTO DEF*/ride see {@link https://test.com} description */ - // m() {} - // } -+ -+ - - // === goToDefinition === - // === /a.js === \ No newline at end of file + // /** @over/*GOTO DEF*/ride see {@link https://test.com} description */ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff deleted file mode 100644 index bc48197ca5..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember12.baseline.jsonc -+++ new.goToDefinitionOverriddenMember12.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff deleted file mode 100644 index e7d8ec0eac..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember13.baseline.jsonc -+++ new.goToDefinitionOverriddenMember13.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff deleted file mode 100644 index 5cfb1e2fea..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember14.baseline.jsonc -+++ new.goToDefinitionOverriddenMember14.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff deleted file mode 100644 index cf25cbfc7d..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember15.baseline.jsonc -+++ new.goToDefinitionOverriddenMember15.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff deleted file mode 100644 index 906c482793..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember2.baseline.jsonc -+++ new.goToDefinitionOverriddenMember2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff deleted file mode 100644 index 40c4bfc79c..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember21.baseline.jsonc -+++ new.goToDefinitionOverriddenMember21.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff deleted file mode 100644 index dca39d5776..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember22.baseline.jsonc -+++ new.goToDefinitionOverriddenMember22.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff deleted file mode 100644 index c788c80d2e..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember23.baseline.jsonc -+++ new.goToDefinitionOverriddenMember23.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff deleted file mode 100644 index bb9c116c92..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember24.baseline.jsonc -+++ new.goToDefinitionOverriddenMember24.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff deleted file mode 100644 index 93099ea461..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember25.baseline.jsonc -+++ new.goToDefinitionOverriddenMember25.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff deleted file mode 100644 index 75887b3425..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember26.baseline.jsonc -+++ new.goToDefinitionOverriddenMember26.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff deleted file mode 100644 index 0baafb9609..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember3.baseline.jsonc -+++ new.goToDefinitionOverriddenMember3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff deleted file mode 100644 index ed33aa0626..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember4.baseline.jsonc -+++ new.goToDefinitionOverriddenMember4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff deleted file mode 100644 index 1459886dc6..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember5.baseline.jsonc -+++ new.goToDefinitionOverriddenMember5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff deleted file mode 100644 index bbd2a2cbb4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember6.baseline.jsonc -+++ new.goToDefinitionOverriddenMember6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff deleted file mode 100644 index 00f5639aac..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember7.baseline.jsonc -+++ new.goToDefinitionOverriddenMember7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff deleted file mode 100644 index c35654b29d..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionOverriddenMember9.baseline.jsonc -+++ new.goToDefinitionOverriddenMember9.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff deleted file mode 100644 index 5f586b9210..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionPartialImplementation.baseline.jsonc -+++ new.goToDefinitionPartialImplementation.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff deleted file mode 100644 index ebd1df3911..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- old.goToDefinitionPrivateName.baseline.jsonc -+++ new.goToDefinitionPrivateName.baseline.jsonc -@@= skipped -11, +11 lines =@@ - // } - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionPrivateName.ts === - // class A { -@@= skipped -13, +15 lines =@@ - // this.#prop - // } - // } -+ -+ - - // === goToDefinition === - // === /goToDefinitionPrivateName.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff deleted file mode 100644 index f28e7d061e..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionPropertyAssignment.baseline.jsonc -+++ new.goToDefinitionPropertyAssignment.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // - // Component.displayName - -+ -+ - // === goToDefinition === - // === /goToDefinitionPropertyAssignment.ts === - // export const Component = () => { return "OK"} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff deleted file mode 100644 index ccc0f33abf..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionRest.baseline.jsonc -+++ new.goToDefinitionRest.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff deleted file mode 100644 index d25d07b9b2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionReturn1.baseline.jsonc -+++ new.goToDefinitionReturn1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff deleted file mode 100644 index 243cbb6aa6..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionReturn2.baseline.jsonc -+++ new.goToDefinitionReturn2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff deleted file mode 100644 index 78702cb697..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionReturn3.baseline.jsonc -+++ new.goToDefinitionReturn3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff deleted file mode 100644 index 2b305b072b..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionReturn5.baseline.jsonc -+++ new.goToDefinitionReturn5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff deleted file mode 100644 index bf0e22d1ab..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn6.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionReturn6.baseline.jsonc -+++ new.goToDefinitionReturn6.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff deleted file mode 100644 index 388e307742..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionReturn7.baseline.jsonc -+++ new.goToDefinitionReturn7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff index c167a0f7cf..519a451e26 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff @@ -1,11 +1,5 @@ --- old.goToDefinitionSameFile.baseline.jsonc +++ new.goToDefinitionSameFile.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /goToDefinitionSameFile.ts === - // var [|localVariable|]; - // function localFunction() { } @@= skipped -6, +6 lines =@@ // module localModule{ export var foo = 1;} // @@ -15,16 +9,7 @@ // localFunction(); // var foo = new localClass(); // class fooCls implements localInterface { } - // var fooVar = localModule.foo; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionSameFile.ts === - // var localVariable; - // function [|localFunction|]() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // // // localVariable = 1; @@ -33,15 +18,7 @@ // var foo = new localClass(); // class fooCls implements localInterface { } // var fooVar = localModule.foo; - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionSameFile.ts === - // var localVariable; - // function localFunction() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // // localVariable = 1; // localFunction(); @@ -50,14 +27,7 @@ // class fooCls implements localInterface { } // var fooVar = localModule.foo; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionSameFile.ts === - // var localVariable; - // function localFunction() { } -@@= skipped -16, +18 lines =@@ +@@= skipped -18, +18 lines =@@ // localVariable = 1; // localFunction(); // var foo = new localClass(); @@ -65,14 +35,8 @@ +// class fooCls implements /*GOTO DEF*/localInterface { } // var fooVar = localModule.foo; --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /goToDefinitionSameFile.ts === - // var localVariable; - // function localFunction() { } -@@= skipped -16, +18 lines =@@ + +@@= skipped -18, +18 lines =@@ // localFunction(); // var foo = new localClass(); // class fooCls implements localInterface { } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff index 7e2bf068e2..e38aebe242 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff @@ -8,10 +8,4 @@ +// /*GOTO DEF*/[|title|]: 'A Title', // } satisfies Record; // - // //somewhere in app - // STRINGS.title -+ -+ - - // === goToDefinition === - // === /goToDefinitionSatisfiesExpression1.ts === \ No newline at end of file + // //somewhere in app \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff index 884e65b545..25cdf6bf16 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImport.baseline.jsonc.diff @@ -10,8 +10,8 @@ +// import /*GOTO DEF*/"./scriptThing"; // import "./stylez.css"; -+ -+ + + // === goToDefinition === -// === /stylez.css === -// [||]div { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff index a52c078060..577cc4df34 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionScriptImportServer.baseline.jsonc.diff @@ -10,6 +10,8 @@ -// import "./stylez.css"; -// import "./foo.txt"; - +- +- -// === goToDefinition === -// === /home/src/workspaces/project/stylez.css === -// [||]div { @@ -21,6 +23,8 @@ -// import /*GOTO DEF*/[|"./stylez.css"|]; -// import "./foo.txt"; - +- +- -// === goToDefinition === -// === /home/src/workspaces/project/foo.txt === -// Unavailable file content: diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff index d6d3b0c240..afdbb212ba 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff @@ -1,9 +1,6 @@ --- old.goToDefinitionShadowVariable.baseline.jsonc +++ new.goToDefinitionShadowVariable.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /goToDefinitionShadowVariable.ts === +@@= skipped -2, +2 lines =@@ // var shadowVariable = "foo"; // function shadowVariableTestModule() { // var [|shadowVariable|]; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff index d81cd87eab..cee48febe1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff @@ -1,8 +1,6 @@ --- old.goToDefinitionShadowVariableInsideModule.baseline.jsonc +++ new.goToDefinitionShadowVariableInsideModule.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === +@@= skipped -1, +1 lines =@@ // === /goToDefinitionShadowVariableInsideModule.ts === // module shdModule { // var [|shdVar|]; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff index 73b3ae3d89..28da289cff 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff @@ -11,26 +11,3 @@ +// var obj = {/*GOTO DEF*/[|name|], id}; // obj.name; // obj.id; -+ -+ - - // === goToDefinition === - // === /goToDefinitionShorthandProperty01.ts === -@@= skipped -15, +17 lines =@@ - // obj.name; - // obj.id; - -+ -+ - // === goToDefinition === - // === /goToDefinitionShorthandProperty01.ts === - // var name = "hello"; -@@= skipped -8, +10 lines =@@ - // var obj = {[|name|], id}; - // obj./*GOTO DEF*/name; - // obj.id; -+ -+ - - // === goToDefinition === - // === /goToDefinitionShorthandProperty01.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff deleted file mode 100644 index e13569c6f4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionShorthandProperty03.baseline.jsonc -+++ new.goToDefinitionShorthandProperty03.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // y - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionShorthandProperty03.ts === - // var x = { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff deleted file mode 100644 index 3d033eafae..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionShorthandProperty06.baseline.jsonc -+++ new.goToDefinitionShorthandProperty06.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff index f722be7ede..9ceffdafe5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff @@ -8,10 +8,8 @@ // === /b.js === // const f = require("./a"); - // /*GOTO DEF*/[|f|](); +@@= skipped -9, +9 lines =@@ -+ -+ // === goToDefinition === // === /a.js === -// module.exports = function [|f|]() {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff index b83a7c8fd3..8b7ee2f6bc 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff @@ -8,11 +8,10 @@ -// var n = new c(); +// var n = new /*GOTO DEF*/[|c|](); +// var n = new c(); -+ -+ - // === goToDefinition === - // === /Definition.ts === + + +@@= skipped -10, +10 lines =@@ // class [|c|] { } // === /Consumption.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff deleted file mode 100644 index f12de40ccd..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionSwitchCase1.baseline.jsonc -+++ new.goToDefinitionSwitchCase1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff deleted file mode 100644 index 0a84d8a3a4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionSwitchCase2.baseline.jsonc -+++ new.goToDefinitionSwitchCase2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff deleted file mode 100644 index e3105da4ee..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionSwitchCase3.baseline.jsonc -+++ new.goToDefinitionSwitchCase3.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // }; - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionSwitchCase3.ts === - // switch (null) { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff deleted file mode 100644 index ae16aea7f7..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionSwitchCase4.baseline.jsonc -+++ new.goToDefinitionSwitchCase4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff deleted file mode 100644 index 306d824c92..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase5.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionSwitchCase5.baseline.jsonc -+++ new.goToDefinitionSwitchCase5.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff index bb6e07e5b1..297b9e0989 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff @@ -8,8 +8,8 @@ // default; // case 42; -+ -+ +@@= skipped -7, +7 lines =@@ + // === goToDefinition === // === /goToDefinitionSwitchCase6.ts === -// [|export default { case }; @@ -17,8 +17,5 @@ // /*GOTO DEF*/default; -// case 42;|] +// case 42; -+ -+ - // === goToDefinition === - // === /goToDefinitionSwitchCase6.ts === \ No newline at end of file + diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff deleted file mode 100644 index 617f89533a..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase7.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionSwitchCase7.baseline.jsonc -+++ new.goToDefinitionSwitchCase7.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff deleted file mode 100644 index 642d012910..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionTaggedTemplateOverloads.baseline.jsonc -+++ new.goToDefinitionTaggedTemplateOverloads.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // /*GOTO DEF*/f`${0}`; - // f`${false}`; - -+ -+ - // === goToDefinition === - // === /goToDefinitionTaggedTemplateOverloads.ts === - // function f(strs: TemplateStringsArray, x: number): void; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff deleted file mode 100644 index 05c6b26b5a..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- old.goToDefinitionThis.baseline.jsonc -+++ new.goToDefinitionThis.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // get self(this: number) { return this; } - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionThis.ts === - // function f(this: number) { -@@= skipped -9, +11 lines =@@ - // constructor() { return /*GOTO DEF*/this; } - // get self(this: number) { return this; } - // } -+ -+ - - // === goToDefinition === - // === /goToDefinitionThis.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff deleted file mode 100644 index a61857db41..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionTypeOnlyImport.baseline.jsonc -+++ new.goToDefinitionTypeOnlyImport.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff deleted file mode 100644 index 160190656a..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionTypePredicate.baseline.jsonc -+++ new.goToDefinitionTypePredicate.baseline.jsonc -@@= skipped -4, +4 lines =@@ - // return typeof parameter === "string"; - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionTypePredicate.ts === - // class [|A|] {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff deleted file mode 100644 index bf5ad15a53..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- old.goToDefinitionTypeofThis.baseline.jsonc -+++ new.goToDefinitionTypeofThis.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // get self(this: number) { type X = typeof this; } - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionTypeofThis.ts === - // function f(this: number) { -@@= skipped -9, +11 lines =@@ - // constructor() { type X = typeof /*GOTO DEF*/this; } - // get self(this: number) { type X = typeof this; } - // } -+ -+ - - // === goToDefinition === - // === /goToDefinitionTypeofThis.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff deleted file mode 100644 index 39e4b27456..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionUnionTypeProperty1.baseline.jsonc -+++ new.goToDefinitionUnionTypeProperty1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff deleted file mode 100644 index 5739a5b250..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionUnionTypeProperty2.baseline.jsonc -+++ new.goToDefinitionUnionTypeProperty2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff deleted file mode 100644 index 2669ee9a09..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionUnionTypeProperty3.baseline.jsonc -+++ new.goToDefinitionUnionTypeProperty3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff deleted file mode 100644 index 9ee6558ce0..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionUnionTypeProperty4.baseline.jsonc -+++ new.goToDefinitionUnionTypeProperty4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff deleted file mode 100644 index 3b9b6290d2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc.diff +++ /dev/null @@ -1,29 +0,0 @@ ---- old.goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc -+++ new.goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc -@@= skipped -18, +18 lines =@@ - // const u2: U = { - // --- (line: 18) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinitionUnionTypeProperty_discriminated.ts === - // type U = A | B; -@@= skipped -23, +25 lines =@@ - // prop: 0, - // }; - -+ -+ - // === goToDefinition === - // === /goToDefinitionUnionTypeProperty_discriminated.ts === - // type U = A | B; -@@= skipped -22, +24 lines =@@ - // /*GOTO DEF*/kind: "bogus", - // prop: 0, - // }; -+ -+ - - // === goToDefinition === - // === /goToDefinitionUnionTypeProperty_discriminated.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff index 0a30135d83..c5d0a0391a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff @@ -1,14 +1,6 @@ --- old.goToDefinitionYield1.baseline.jsonc +++ new.goToDefinitionYield1.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // yield 0; - // } - -+ -+ - // === goToDefinition === - // === /goToDefinitionYield1.ts === - // function* gen() { +@@= skipped -15, +15 lines =@@ // yield 0; // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff deleted file mode 100644 index 902c09c657..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionYield2.baseline.jsonc -+++ new.goToDefinitionYield2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff index d44c4743a9..ef9ccad573 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff @@ -8,8 +8,5 @@ -// } -// } +// --- (line: 7) skipped --- -+ -+ - // === goToDefinition === - // === /goToDefinitionYield3.ts === \ No newline at end of file + diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff deleted file mode 100644 index 1005ecbef6..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinitionYield4.baseline.jsonc -+++ new.goToDefinitionYield4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff deleted file mode 100644 index b4218ec467..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinition_filteringMappedType.baseline.jsonc -+++ new.goToDefinition_filteringMappedType.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff deleted file mode 100644 index ef1c65b0ae..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinition_mappedType.baseline.jsonc -+++ new.goToDefinition_mappedType.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff deleted file mode 100644 index a9f2a55d0a..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- old.goToDefinition_super.baseline.jsonc -+++ new.goToDefinition_super.baseline.jsonc -@@= skipped -12, +12 lines =@@ - // super.x(); - // --- (line: 12) skipped --- - -+ -+ - // === goToDefinition === - // === /goToDefinition_super.ts === - // class A { -@@= skipped -17, +19 lines =@@ - // } - // class D { - // --- (line: 15) skipped --- -+ -+ - - // === goToDefinition === - // === /goToDefinition_super.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff deleted file mode 100644 index 00e4d3179d..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToDefinition_untypedModule.baseline.jsonc -+++ new.goToDefinition_untypedModule.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff deleted file mode 100644 index 45ea42463f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToTypeDefinition4.baseline.jsonc -+++ new.goToTypeDefinition4.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff deleted file mode 100644 index d1d546f983..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.gotoDefinitionConstructorFunction.baseline.jsonc -+++ new.gotoDefinitionConstructorFunction.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff index a84199dbea..183e1e764a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff @@ -14,8 +14,8 @@ // var p0 = ({aa}) => {console.log(aa)}; -// function f2({ a/*GOTO DEF*/1, b1 }: { [|a1|]: number, b1: number } = { a1: 0, b1: 0 }) {} +// function f2({ [|a/*GOTO DEF*/1|], b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} -+ -+ + + // === goToDefinition === // === /gotoDefinitionInObjectBindingPattern2.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff index 36039fa8c2..e14f9de235 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff @@ -1,11 +1,5 @@ --- old.gotoDefinitionLinkTag1.baseline.jsonc +++ new.gotoDefinitionLinkTag1.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /foo.ts === - // interface [|Foo|] { - // foo: string @@= skipped -7, +7 lines =@@ // baz: Foo // } @@ -15,16 +9,7 @@ // const a = "" // /** {@link NS.Bar} ns.bar*/ // const b = "" - // --- (line: 13) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /foo.ts === - // interface Foo { - // foo: string -@@= skipped -18, +20 lines =@@ +@@= skipped -20, +20 lines =@@ // } // /** {@link Foo} foooo*/ // const a = "" @@ -33,14 +18,7 @@ // const b = "" // /** {@link Foo f1}*/ // const c = "" - // --- (line: 15) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /foo.ts === - // interface [|Foo|] { +@@= skipped -14, +14 lines =@@ // foo: string // } // namespace NS { @@ -60,16 +38,7 @@ // const c = "" // /** {@link NS.Bar ns.bar}*/ // const d = "" - // --- (line: 17) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /foo.ts === - // interface Foo { - // foo: string -@@= skipped -42, +44 lines =@@ +@@= skipped -32, +30 lines =@@ // const b = "" // /** {@link Foo f1}*/ // const c = "" @@ -78,16 +47,7 @@ // const d = "" // /** {@link d }dd*/ // const e = "" - // /** @param x {@link Foo} */ - // function foo(x) { } - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /foo.ts === - // --- (line: 12) skipped --- - // /** {@link Foo f1}*/ +@@= skipped -16, +16 lines =@@ // const c = "" // /** {@link NS.Bar ns.bar}*/ // const [|d|] = "" @@ -96,13 +56,7 @@ // const e = "" // /** @param x {@link Foo} */ // function foo(x) { } - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /foo.ts === - // interface [|Foo|] { +@@= skipped -13, +13 lines =@@ // foo: string // } // namespace NS { @@ -119,12 +73,8 @@ +// /** @param x {@link /*GOTO DEF*/Foo} */ // function foo(x) { } --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /foo.ts === - // interface [|Foo|] { + +@@= skipped -19, +17 lines =@@ // foo: string // } // namespace NS { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff index 14d60790b9..89254eca89 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.gotoDefinitionLinkTag2.baseline.jsonc +++ new.gotoDefinitionLinkTag2.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /gotoDefinitionLinkTag2.ts === // enum E { -// /** {@link /*GOTO DEF POS*/A} */ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff index ac83789992..37403b17ed 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.gotoDefinitionLinkTag3.baseline.jsonc +++ new.gotoDefinitionLinkTag3.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /a.ts === // enum E { -// /** {@link /*GOTO DEF POS*/Foo} */ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff index 0a459889aa..522e7c4824 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff @@ -1,13 +1,12 @@ --- old.gotoDefinitionLinkTag4.baseline.jsonc +++ new.gotoDefinitionLinkTag4.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === + // === goToDefinition === -// === /a.ts === -// interface [|Foo|] { -// foo: E.Foo; -// } - -+// === goToDefinition === // === /b.ts === // enum E { -// /** {@link /*GOTO DEF POS*/Foo} */ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff index d62705827f..b6bf8fea12 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.gotoDefinitionLinkTag5.baseline.jsonc +++ new.gotoDefinitionLinkTag5.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /gotoDefinitionLinkTag5.ts === // enum E { -// /** {@link /*GOTO DEF POS*/B} */ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff index aef5cc1f93..c55c84fc71 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.gotoDefinitionLinkTag6.baseline.jsonc +++ new.gotoDefinitionLinkTag6.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /gotoDefinitionLinkTag6.ts === // enum E { -// /** {@link E./*GOTO DEF POS*/A} */ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff deleted file mode 100644 index ff82f11c8f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc -+++ new.gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // class C extends (foo())./*GOTO DEF*/B {} - // class C1 extends foo().B {} - -+ -+ - // === goToDefinition === - // === /gotoDefinitionPropertyAccessExpressionHeritageClause.ts === - // class B {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff index 02c99e8ec4..a3076654a4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff @@ -1,11 +1,6 @@ --- old.gotoDefinitionSatisfiesTag.baseline.jsonc +++ new.gotoDefinitionSatisfiesTag.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /a.js === - // /** - // * @typedef {Object} [|T|] +@@= skipped -4, +4 lines =@@ // * @property {number} a // */ // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff index 308a842f16..f2bd343422 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.gotoDefinitionThrowsTag.baseline.jsonc +++ new.gotoDefinitionThrowsTag.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /gotoDefinitionThrowsTag.ts === -// class [|E|] extends Error {} +// class E extends Error {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff deleted file mode 100644 index b58aad13e7..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc.diff +++ /dev/null @@ -1,56 +0,0 @@ ---- old.importTypeNodeGoToDefinition.baseline.jsonc -+++ new.importTypeNodeGoToDefinition.baseline.jsonc -@@= skipped -9, +9 lines =@@ - // type A = typeof import(/*GOTO DEF*/[|"./ns"|]).Foo.Bar; - // type B = import("./ns").Foo.Bar.Baz; - -+ -+ - // === goToDefinition === - // === /ns.ts === - // export namespace [|Foo|] { -@@= skipped -12, +14 lines =@@ - // type A = typeof import("./ns")./*GOTO DEF*/[|Foo|].Bar; - // type B = import("./ns").Foo.Bar.Baz; - -+ -+ - // === goToDefinition === - // === /ns.ts === - // export namespace Foo { -@@= skipped -12, +14 lines =@@ - // type A = typeof import("./ns").Foo./*GOTO DEF*/[|Bar|]; - // type B = import("./ns").Foo.Bar.Baz; - -+ -+ - // === goToDefinition === - // === /ns.ts === - // [|export namespace Foo { -@@= skipped -12, +14 lines =@@ - // type A = typeof import("./ns").Foo.Bar; - // type B = import(/*GOTO DEF*/[|"./ns"|]).Foo.Bar.Baz; - -+ -+ - // === goToDefinition === - // === /ns.ts === - // export namespace [|Foo|] { -@@= skipped -12, +14 lines =@@ - // type A = typeof import("./ns").Foo.Bar; - // type B = import("./ns")./*GOTO DEF*/[|Foo|].Bar.Baz; - -+ -+ - // === goToDefinition === - // === /ns.ts === - // export namespace Foo { -@@= skipped -11, +13 lines =@@ - // === /usage.ts === - // type A = typeof import("./ns").Foo.Bar; - // type B = import("./ns").Foo./*GOTO DEF*/[|Bar|].Baz; -+ -+ - - // === goToDefinition === - // === /ns.ts === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff deleted file mode 100644 index dbf7f7909f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.javaScriptClass3.baseline.jsonc -+++ new.javaScriptClass3.baseline.jsonc -@@= skipped -10, +10 lines =@@ - // x.alpha/*GOTO DEF*/; - // x.beta; - -+ -+ - // === goToDefinition === - // === /Foo.js === - // class Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff index 9239757c1d..a6476eda84 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff @@ -1,11 +1,5 @@ --- old.jsDocSee1.baseline.jsonc +++ new.jsDocSee1.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /jsDocSee1.ts === - // interface [|Foo|] { - // foo: string @@= skipped -7, +7 lines =@@ // baz: Foo // } @@ -15,16 +9,7 @@ // const a = "" // /** @see {NS.Bar} ns.bar*/ // const b = "" - // --- (line: 13) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /jsDocSee1.ts === - // interface Foo { - // foo: string -@@= skipped -18, +20 lines =@@ +@@= skipped -20, +20 lines =@@ // } // /** @see {Foo} foooo*/ // const a = "" @@ -33,14 +18,7 @@ // const b = "" // /** @see Foo f1*/ // const c = "" - // --- (line: 15) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /jsDocSee1.ts === - // interface [|Foo|] { +@@= skipped -14, +14 lines =@@ // foo: string // } // namespace NS { @@ -60,17 +38,7 @@ // const c = "" // /** @see NS.Bar ns.bar*/ // const d = "" - // /** @see d dd*/ - // const e = "" - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /jsDocSee1.ts === - // interface Foo { - // foo: string -@@= skipped -43, +45 lines =@@ +@@= skipped -33, +31 lines =@@ // const b = "" // /** @see Foo f1*/ // const c = "" @@ -79,14 +47,7 @@ // const d = "" // /** @see d dd*/ // const e = "" - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /jsDocSee1.ts === - // --- (line: 12) skipped --- - // /** @see Foo f1*/ +@@= skipped -14, +14 lines =@@ // const c = "" // /** @see NS.Bar ns.bar*/ // const [|d|] = "" diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff deleted file mode 100644 index f6bf716112..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.jsDocSee2.baseline.jsonc -+++ new.jsDocSee2.baseline.jsonc -@@= skipped -61, +61 lines =@@ - // /** @see d@{fff} partial reference */ - // const g = "" - -+ -+ - // === goToDefinition === - // === /jsDocSee2.ts === - // --- (line: 7) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff index 346a664645..52c64c134d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.jsDocSee3.baseline.jsonc +++ new.jsDocSee3.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /jsDocSee3.ts === -// function foo (a: string) { +// function foo ([|a|]: string) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff index 510c0c1707..831c8bd20d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff @@ -1,11 +1,6 @@ --- old.jsDocSee4.baseline.jsonc +++ new.jsDocSee4.baseline.jsonc -@@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === - // === /jsDocSee4.ts === - // class [|A|] { - // foo () { } +@@= skipped -4, +4 lines =@@ // } // declare const a: A; // /** @@ -14,16 +9,7 @@ // */ // const t1 = 1 // /** - // --- (line: 10) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /jsDocSee4.ts === - // class A { - // foo () { } -@@= skipped -21, +23 lines =@@ +@@= skipped -19, +19 lines =@@ // */ // const t1 = 1 // /** @@ -32,16 +18,7 @@ // */ // const t2 = 1 // /** - // --- (line: 14) skipped --- - --// === getDefinitionAtPosition === -+ -+ -+// === goToDefinition === - // === /jsDocSee4.ts === - // class A { - // foo () { } -@@= skipped -21, +23 lines =@@ +@@= skipped -23, +23 lines =@@ // */ // const t2 = 1 // /** diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff deleted file mode 100644 index 30b8262e61..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsdocTypedefTagGoToDefinition.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.jsdocTypedefTagGoToDefinition.baseline.jsonc -+++ new.jsdocTypedefTagGoToDefinition.baseline.jsonc -@@= skipped -15, +15 lines =@@ - // /** @type {Animal} */ - // var animal; animal.animalName - -+ -+ - // === goToDefinition === - // === /jsdocCompletion_typedef.js === - // --- (line: 4) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff deleted file mode 100644 index 5baaa73ba0..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.jsxSpreadReference.baseline.jsonc -+++ new.jsxSpreadReference.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff index f3cf53627d..440492a281 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff @@ -1,8 +1,7 @@ --- old.reallyLargeFile.baseline.jsonc +++ new.reallyLargeFile.baseline.jsonc @@= skipped -0, +0 lines =@@ --// === getDefinitionAtPosition === -+// === goToDefinition === + // === goToDefinition === // === /file.d.ts === -// namespace /*GOTO DEF POS*/[|Foo|] { -// diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff deleted file mode 100644 index 3965aab18c..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- old.tsxGoToDefinitionClasses.baseline.jsonc -+++ new.tsxGoToDefinitionClasses.baseline.jsonc -@@= skipped -13, +13 lines =@@ - // var y = ; - // var z = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 4) skipped --- -@@= skipped -12, +14 lines =@@ - // var x = ; - // var y = ; - // var z = ; -+ -+ - - // === goToDefinition === - // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff deleted file mode 100644 index 3b8b2f1158..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- old.tsxGoToDefinitionIntrinsics.baseline.jsonc -+++ new.tsxGoToDefinitionIntrinsics.baseline.jsonc -@@= skipped -13, +13 lines =@@ - // var y = ; - // var z =
; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 4) skipped --- -@@= skipped -12, +14 lines =@@ - // var x =
; - // var y = ; - // var z =
; -+ -+ - - // === goToDefinition === - // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff deleted file mode 100644 index f5f70a721f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc.diff +++ /dev/null @@ -1,47 +0,0 @@ ---- old.tsxGoToDefinitionStatelessFunction1.baseline.jsonc -+++ new.tsxGoToDefinitionStatelessFunction1.baseline.jsonc -@@= skipped -9, +9 lines =@@ - // let opt2 = ; - // let opt3 = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 8) skipped --- -@@= skipped -12, +14 lines =@@ - // let opt2 = ; - // let opt3 = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 8) skipped --- -@@= skipped -12, +14 lines =@@ - // let opt2 = ; - // let opt3 = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 8) skipped --- -@@= skipped -12, +14 lines =@@ - // let opt2 = ; - // let opt3 = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 4) skipped --- -@@= skipped -15, +17 lines =@@ - // let opt1 = ; - // let opt2 = ; - // let opt3 = ; -+ -+ - - // === goToDefinition === - // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff deleted file mode 100644 index 29cba45db7..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc.diff +++ /dev/null @@ -1,47 +0,0 @@ ---- old.tsxGoToDefinitionStatelessFunction2.baseline.jsonc -+++ new.tsxGoToDefinitionStatelessFunction2.baseline.jsonc -@@= skipped -13, +13 lines =@@ - // let opt = ; - // let opt = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 13) skipped --- -@@= skipped -16, +18 lines =@@ - // let opt = ; - // let opt = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 13) skipped --- -@@= skipped -16, +18 lines =@@ - // let opt = ; - // let opt = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 13) skipped --- -@@= skipped -16, +18 lines =@@ - // let opt = ; - // let opt = ; - -+ -+ - // === goToDefinition === - // === /file.tsx === - // --- (line: 14) skipped --- -@@= skipped -14, +16 lines =@@ - // let opt = {}} ignore-prop />; - // let opt =
; - // let opt = ; -+ -+ - - // === goToDefinition === - // === /file.tsx === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff deleted file mode 100644 index 3df558c554..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.tsxGoToDefinitionUnionElementType1.baseline.jsonc -+++ new.tsxGoToDefinitionUnionElementType1.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff deleted file mode 100644 index a3464bb0ab..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.tsxGoToDefinitionUnionElementType2.baseline.jsonc -+++ new.tsxGoToDefinitionUnionElementType2.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff deleted file mode 100644 index aed291dd32..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationClassMethod_00.baseline.jsonc -+++ new.goToImplementationClassMethod_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff deleted file mode 100644 index 031ec1b27a..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToImplementationClassMethod_01.baseline.jsonc -+++ new.goToImplementationClassMethod_01.baseline.jsonc -@@= skipped -11, +11 lines =@@ - // x.he/*GOTO IMPL*/llo(); - // } - -+ -+ - // === goToImplementation === - // === /goToImplementationClassMethod_01.ts === - // abstract class AbstractBar { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff deleted file mode 100644 index d2d6834b4c..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationEnum_00.baseline.jsonc -+++ new.goToImplementationEnum_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff deleted file mode 100644 index 71107258ac..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationEnum_01.baseline.jsonc -+++ new.goToImplementationEnum_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff deleted file mode 100644 index 316e60a704..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToImplementationInterfaceMethod_00.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_00.baseline.jsonc -@@= skipped -18, +18 lines =@@ - // constructor(public f: Foo = { [|hello|]() {/**3*/} } ) {} - // } - -+ -+ - // === goToImplementation === - // === /goToImplementationInterfaceMethod_00.ts === - // interface Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff deleted file mode 100644 index ab1e266da5..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToImplementationInterfaceMethod_01.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_01.baseline.jsonc -@@= skipped -13, +13 lines =@@ - // - // whatever(new Bar()); - -+ -+ - // === goToImplementation === - // === /goToImplementationInterfaceMethod_01.ts === - // interface Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff deleted file mode 100644 index e040a4265e..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToImplementationInterfaceMethod_02.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_02.baseline.jsonc -@@= skipped -10, +10 lines =@@ - // a.he/*GOTO IMPL*/llo(); - // } - -+ -+ - // === goToImplementation === - // === /goToImplementationInterfaceMethod_02.ts === - // interface Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff deleted file mode 100644 index c13b9baf3f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterfaceMethod_03.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_03.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff deleted file mode 100644 index 9d8c01fbf8..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterfaceMethod_04.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_04.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff deleted file mode 100644 index 0736c3c8bc..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterfaceMethod_08.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_08.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff index d3cf48246a..d9fcbf78db 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff @@ -18,12 +18,8 @@ // // whatever() { // super.he/*GOTO IMPL*/llo(); -@@= skipped -16, +24 lines =@@ - // hello() {} - // } +@@= skipped -20, +28 lines =@@ -+ -+ // === goToImplementation === // === /goToImplementationInterfaceMethod_09.ts === -// --- (line: 10) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff deleted file mode 100644 index a142635742..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToImplementationInterfaceMethod_10.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_10.baseline.jsonc -@@= skipped -30, +30 lines =@@ - // x.hello(); - // } - -+ -+ - // === goToImplementation === - // === /goToImplementationInterfaceMethod_10.ts === - // --- (line: 11) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff deleted file mode 100644 index 59dc35af22..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterfaceMethod_11.baseline.jsonc -+++ new.goToImplementationInterfaceMethod_11.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff deleted file mode 100644 index d84424e4d5..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterfaceProperty_00.baseline.jsonc -+++ new.goToImplementationInterfaceProperty_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff deleted file mode 100644 index 1d32bda5bf..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterfaceProperty_01.baseline.jsonc -+++ new.goToImplementationInterfaceProperty_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff deleted file mode 100644 index 9f1afb0965..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterface_08.baseline.jsonc -+++ new.goToImplementationInterface_08.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff deleted file mode 100644 index 5ff7464d63..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationInterface_10.baseline.jsonc -+++ new.goToImplementationInterface_10.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff deleted file mode 100644 index 577c67269e..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_00.baseline.jsonc -+++ new.goToImplementationLocal_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff deleted file mode 100644 index 3246188add..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_01.baseline.jsonc -+++ new.goToImplementationLocal_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff deleted file mode 100644 index 1794e6b646..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_02.baseline.jsonc -+++ new.goToImplementationLocal_02.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff deleted file mode 100644 index bb76e85c7f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_03.baseline.jsonc -+++ new.goToImplementationLocal_03.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff deleted file mode 100644 index 76f304e816..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_04.baseline.jsonc -+++ new.goToImplementationLocal_04.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff deleted file mode 100644 index 46d1466859..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_05.baseline.jsonc -+++ new.goToImplementationLocal_05.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff deleted file mode 100644 index 8857f75d49..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_06.baseline.jsonc -+++ new.goToImplementationLocal_06.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff deleted file mode 100644 index 5d3a95fabe..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_07.baseline.jsonc -+++ new.goToImplementationLocal_07.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff deleted file mode 100644 index 96dceccb2c..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationLocal_08.baseline.jsonc -+++ new.goToImplementationLocal_08.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff deleted file mode 100644 index 940caf4cac..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToImplementationNamespace_00.baseline.jsonc -+++ new.goToImplementationNamespace_00.baseline.jsonc -@@= skipped -10, +10 lines =@@ - // let x = Fo/*GOTO IMPL*/o; - // let y = Bar; - -+ -+ - // === goToImplementation === - // === /goToImplementationNamespace_00.ts === - // namespace Foo { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff deleted file mode 100644 index 5307a163ba..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationNamespace_01.baseline.jsonc -+++ new.goToImplementationNamespace_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff deleted file mode 100644 index 628c4678c4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationNamespace_02.baseline.jsonc -+++ new.goToImplementationNamespace_02.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff index 82d3afc2ff..f2c9d8c9f5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff @@ -1,20 +1,7 @@ --- old.goToImplementationNamespace_05.baseline.jsonc +++ new.goToImplementationNamespace_05.baseline.jsonc -@@= skipped -12, +12 lines =@@ - // let x1 = Foo.Baz; - // let y1 = Bar.Baz; +@@= skipped -33, +33 lines =@@ -+ -+ - // === goToImplementation === - // === /goToImplementationNamespace_05.ts === - // namespace Foo.Baz { -@@= skipped -15, +17 lines =@@ - // let x1 = Foo.Baz; - // let y1 = Bar.Baz; - -+ -+ // === goToImplementation === // === /goToImplementationNamespace_05.ts === -// namespace Foo.[|Baz|] { @@ -28,11 +15,8 @@ // // let x = Foo; // let y = Bar; - // let x1 = Foo.B/*GOTO IMPL*/az; - // let y1 = Bar.Baz; +@@= skipped -17, +11 lines =@@ -+ -+ // === goToImplementation === // === /goToImplementationNamespace_05.ts === -// namespace Foo.Baz { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff index fd40604023..69eb7824ac 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff @@ -12,8 +12,8 @@ +// } +// +// --- (line: 27) skipped --- -+ -+ + + // === goToImplementation === // === /goToImplementationShorthandPropertyAssignment_00.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff deleted file mode 100644 index 4abbbe3baf..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationShorthandPropertyAssignment_02.baseline.jsonc -+++ new.goToImplementationShorthandPropertyAssignment_02.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff deleted file mode 100644 index 045660e113..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationThis_00.baseline.jsonc -+++ new.goToImplementationThis_00.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff deleted file mode 100644 index 6f1652d3a9..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementationThis_01.baseline.jsonc -+++ new.goToImplementationThis_01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff deleted file mode 100644 index 3d48b83c18..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementation_inDifferentFiles.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToImplementation_inDifferentFiles.baseline.jsonc -+++ new.goToImplementation_inDifferentFiles.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff deleted file mode 100644 index c4c827eb68..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/implementation01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.implementation01.baseline.jsonc -+++ new.implementation01.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff deleted file mode 100644 index 04b4e5c871..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToTypeDefinition.baseline.jsonc -+++ new.goToTypeDefinition.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff deleted file mode 100644 index b9b12639d4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToTypeDefinition3.baseline.jsonc -+++ new.goToTypeDefinition3.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff deleted file mode 100644 index 65efa66ae4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToTypeDefinitionAliases.baseline.jsonc -+++ new.goToTypeDefinitionAliases.baseline.jsonc -@@= skipped -8, +8 lines =@@ - // import {/*GOTO TYPE*/v2 as v3} from "./goToTypeDefinitioAliases_module2"; - // v3; - -+ -+ - // === goToType === - // === /goToTypeDefinitioAliases_module1.ts === - // interface [|I|] { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff deleted file mode 100644 index 0421c767ad..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionEnumMembers.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToTypeDefinitionEnumMembers.baseline.jsonc -+++ new.goToTypeDefinitionEnumMembers.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff deleted file mode 100644 index b133354184..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToTypeDefinitionImportMeta.baseline.jsonc -+++ new.goToTypeDefinitionImportMeta.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff index 92dbd9926d..5c689cdaa8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff @@ -17,12 +17,10 @@ -// -// export function foo() { } +// --- (line: 5) skipped --- -+ -+ - // === goToType === - // === /a.ts === -@@= skipped -19, +10 lines =@@ + + +@@= skipped -21, +10 lines =@@ // // private z: string; // @@ -39,12 +37,10 @@ -// -// export function foo() { } +// --- (line: 5) skipped --- -+ -+ - // === goToType === - // === /a.ts === -@@= skipped -47, +38 lines =@@ + + +@@= skipped -49, +38 lines =@@ // // readonly x: string; // @@ -57,12 +53,10 @@ -// -// export function foo() { } +// --- (line: 9) skipped --- -+ -+ - // === goToType === - // === /a.ts === -@@= skipped -19, +14 lines =@@ + + +@@= skipped -21, +14 lines =@@ // // readonly x: string; // @@ -75,12 +69,10 @@ -// -// export function foo() { } +// --- (line: 9) skipped --- -+ -+ - // === goToType === - // === /a.ts === -@@= skipped -38, +33 lines =@@ + + +@@= skipped -40, +33 lines =@@ // === goToType === @@ -113,12 +105,9 @@ // === /a.ts === // --- (line: 5) skipped --- // -@@= skipped -37, +11 lines =@@ - // - // --- (line: 13) skipped --- +@@= skipped -40, +14 lines =@@ + -+ -+ // === goToType === -// === lib.d.ts === -// --- (line: --) skipped --- @@ -149,37 +138,28 @@ // === /a.ts === // --- (line: 5) skipped --- // -@@= skipped -38, +14 lines =@@ +@@= skipped -45, +19 lines =@@ + // + // async a() { } // - // --- (line: 13) skipped --- - --// === goToType === --// === /a.ts === --// --- (line: 7) skipped --- --// --// async a() { } --// -// /*GOTO TYPE*/override [|b|]() {} --// --// public async c() { } --// } --// --// export function foo() { } -- --// === goToType === --// === /a.ts === --// --- (line: 7) skipped --- --// --// async a() { } --// ++// /*GOTO TYPE*/override b() {} + // + // public async c() { } + // } +@@= skipped -15, +15 lines =@@ + // + // async a() { } + // -// override [|b|]/*GOTO TYPE*/() {} --// --// public async c() { } --// } --// --// export function foo() { } -- --// === goToType === ++// override b/*GOTO TYPE*/() {} + // + // public async c() { } + // } +@@= skipped -10, +10 lines =@@ + + + // === goToType === -// === lib.d.ts === -// --- (line: --) skipped --- -// /** @@ -206,48 +186,12 @@ -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. -// --- (line: --) skipped --- - -+ -+ -+// === goToType === -+// === /a.ts === -+// --- (line: 7) skipped --- -+// -+// async a() { } -+// -+// /*GOTO TYPE*/override b() {} -+// -+// public async c() { } -+// } -+// -+// export function foo() { } -+ -+ -+ -+// === goToType === -+// === /a.ts === -+// --- (line: 7) skipped --- -+// -+// async a() { } -+// -+// override b/*GOTO TYPE*/() {} -+// -+// public async c() { } -+// } -+// -+// export function foo() { } -+ -+ -+ -+// === goToType === // === /a.ts === // --- (line: 9) skipped --- // -@@= skipped -63, +43 lines =@@ - // - // export function foo() { } +@@= skipped -39, +13 lines =@@ + -+ -+ // === goToType === -// === lib.d.ts === -// --- (line: --) skipped --- @@ -278,12 +222,9 @@ // === /a.ts === // --- (line: 9) skipped --- // -@@= skipped -37, +13 lines =@@ - // - // export function foo() { } +@@= skipped -39, +13 lines =@@ + -+ -+ // === goToType === -// === lib.d.ts === -// --- (line: --) skipped --- @@ -314,12 +255,9 @@ // === /a.ts === // --- (line: 9) skipped --- // -@@= skipped -37, +13 lines =@@ - // - // export function foo() { } +@@= skipped -39, +13 lines =@@ + -+ -+ // === goToType === -// === lib.d.ts === -// --- (line: --) skipped --- @@ -350,41 +288,18 @@ // === /a.ts === // --- (line: 9) skipped --- // -@@= skipped -37, +13 lines =@@ +@@= skipped -44, +18 lines =@@ + // public async c() { } + // } // - // export function foo() { } - --// === goToType === --// === /a.ts === --// --- (line: 12) skipped --- --// public async c() { } --// } --// -// exp/*GOTO TYPE*/ort function [|foo|]() { } -- --// === goToType === --// === /a.ts === --// --- (line: 12) skipped --- --// public async c() { } --// } --// --// export function [|foo|]/*GOTO TYPE*/() { } -+ -+ -+// === goToType === -+// === /a.ts === -+// --- (line: 12) skipped --- -+// public async c() { } -+// } -+// +// exp/*GOTO TYPE*/ort function foo() { } -+ -+ -+ -+// === goToType === -+// === /a.ts === -+// --- (line: 12) skipped --- -+// public async c() { } -+// } -+// + + + +@@= skipped -10, +10 lines =@@ + // public async c() { } + // } + // +-// export function [|foo|]/*GOTO TYPE*/() { } +// export function foo/*GOTO TYPE*/() { } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff deleted file mode 100644 index 9466a357ae..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToTypeDefinitionModule.baseline.jsonc -+++ new.goToTypeDefinitionModule.baseline.jsonc -@@= skipped -8, +8 lines =@@ - // /*GOTO TYPE*/M; - // m; - -+ -+ - // === goToType === - // === /module1.ts === - // module [|M|] { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff deleted file mode 100644 index c6af7e0399..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToTypeDefinitionUnionType.baseline.jsonc -+++ new.goToTypeDefinitionUnionType.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff index 0e31d3f005..5e930bbda2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff @@ -16,7 +16,8 @@ -// /** -// * Construct a type with a set of properties K of type T -// --- (line: --) skipped --- -+ +- + // === goToType === // === /goToTypeDefinition_Pick.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff index d2e8016f9f..2563acc15d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff @@ -200,7 +200,7 @@ -// interface ArrayConstructor { -// new (arrayLength?: number): any[]; -// --- (line: --) skipped --- - +- -// --- (line: --) skipped --- -// readonly prototype: any[]; -// } @@ -210,13 +210,15 @@ -// interface TypedPropertyDescriptor { -// enumerable?: boolean; -// --- (line: --) skipped --- +- + // === goToType === - // === /goToTypeDefinition_arrayType.ts === -@@= skipped -221, +16 lines =@@ +@@= skipped -222, +15 lines =@@ + // class CustomArray extends Array { immutableReverse() { return [...this].reverse() } } // declare const users3: CustomArray // users3 - +- -// === lib.d.ts === -// --- (line: --) skipped --- -// slice(start?: number, end?: number): T[]; @@ -413,7 +415,7 @@ -// interface ArrayConstructor { -// new (arrayLength?: number): any[]; -// --- (line: --) skipped --- - +- -// --- (line: --) skipped --- -// readonly prototype: any[]; -// } @@ -424,5 +426,4 @@ -// enumerable?: boolean; -// --- (line: --) skipped --- - // === goToType === - // === /goToTypeDefinition_arrayType.ts === \ No newline at end of file + diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff index cea1fc9470..d9a5048cfc 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff @@ -29,11 +29,11 @@ -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. -// --- (line: --) skipped --- -+ +- + // === goToType === - // === /goToTypeDefinition_promiseType.ts === -@@= skipped -34, +10 lines =@@ +@@= skipped -36, +10 lines =@@ // const /*GOTO TYPE*/promisedBob = getUser() // // export {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff index 0f91326f23..782e9e3347 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff @@ -1,65 +1,7 @@ --- old.goToTypeDefinition_returnType.baseline.jsonc +++ new.goToTypeDefinition_returnType.baseline.jsonc -@@= skipped -15, +15 lines =@@ - // f3(); - // --- (line: 29) skipped --- +@@= skipped -148, +148 lines =@@ -+ -+ - // === goToType === - // === /goToTypeDefinition_returnType.ts === - // interface I { x: number; } -@@= skipped -23, +25 lines =@@ - // f4(); - // --- (line: 30) skipped --- - -+ -+ - // === goToType === - // === /goToTypeDefinition_returnType.ts === - // interface [|I|] { x: number; } -@@= skipped -18, +20 lines =@@ - // f5(); - // --- (line: 31) skipped --- - -+ -+ - // === goToType === - // === /goToTypeDefinition_returnType.ts === - // --- (line: 7) skipped --- -@@= skipped -23, +25 lines =@@ - // f7(); - // f8(); - -+ -+ - // === goToType === - // === /goToTypeDefinition_returnType.ts === - // interface [|I|] { x: number; } -@@= skipped -18, +20 lines =@@ - // f7(); - // f8(); - -+ -+ - // === goToType === - // === /goToTypeDefinition_returnType.ts === - // interface [|I|] { x: number; } -@@= skipped -18, +20 lines =@@ - // f7(); - // f8(); - -+ -+ - // === goToType === - // === /goToTypeDefinition_returnType.ts === - // interface [|I|] { x: number; } -@@= skipped -17, +19 lines =@@ - // f7(); - // f8(); - -+ -+ // === goToType === // === /goToTypeDefinition_returnType.ts === -// --- (line: 15) skipped --- @@ -75,12 +17,8 @@ // --- (line: 28) skipped --- // f4(); // f5(); -@@= skipped -19, +11 lines =@@ - // /*GOTO TYPE*/f7(); - // f8(); +@@= skipped -21, +11 lines =@@ -+ -+ // === goToType === // === /goToTypeDefinition_returnType.ts === -// --- (line: 19) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff deleted file mode 100644 index f856467e9d..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_typeReference.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.goToTypeDefinition_typeReference.baseline.jsonc -+++ new.goToTypeDefinition_typeReference.baseline.jsonc \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff deleted file mode 100644 index 45d2a4f6e2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/typedefinition01.baseline.jsonc.diff +++ /dev/null @@ -1,2 +0,0 @@ ---- old.typedefinition01.baseline.jsonc -+++ new.typedefinition01.baseline.jsonc \ No newline at end of file From e75bb1742c67a912cd244b1f133f45c337771aaf Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Mon, 17 Nov 2025 14:34:25 -0800 Subject: [PATCH 06/12] fix goto def comment --- internal/fourslash/baselineutil.go | 2 + ...onMapsOutOfDateMapping.baseline.jsonc.diff | 8 --- ...nitionNameOnEnumMember.baseline.jsonc.diff | 8 --- ...goToDefinitionAmbiants.baseline.jsonc.diff | 44 --------------- ...efinitionDifferentFile.baseline.jsonc.diff | 44 --------------- ...ifferentFileIndirectly.baseline.jsonc.diff | 44 --------------- ...DefinitionFunctionType.baseline.jsonc.diff | 28 ---------- ...ionImplicitConstructor.baseline.jsonc.diff | 8 --- ...finitionInTypeArgument.baseline.jsonc.diff | 17 ------ ...nterfaceAfterImplement.baseline.jsonc.diff | 11 ---- ...bjectLiteralProperties.baseline.jsonc.diff | 44 --------------- ...goToDefinitionSameFile.baseline.jsonc.diff | 44 --------------- ...finitionShadowVariable.baseline.jsonc.diff | 9 --- ...owVariableInsideModule.baseline.jsonc.diff | 9 --- ...gotoDefinitionLinkTag1.baseline.jsonc.diff | 56 +------------------ ...gotoDefinitionLinkTag2.baseline.jsonc.diff | 10 ---- ...gotoDefinitionLinkTag3.baseline.jsonc.diff | 6 +- ...gotoDefinitionLinkTag4.baseline.jsonc.diff | 3 +- ...gotoDefinitionLinkTag5.baseline.jsonc.diff | 11 ---- ...gotoDefinitionLinkTag6.baseline.jsonc.diff | 10 ---- ...DefinitionSatisfiesTag.baseline.jsonc.diff | 9 --- ...otoDefinitionThrowsTag.baseline.jsonc.diff | 5 +- .../jsDocSee1.baseline.jsonc.diff | 43 +------------- .../jsDocSee3.baseline.jsonc.diff | 3 +- .../jsDocSee4.baseline.jsonc.diff | 28 ---------- .../reallyLargeFile.baseline.jsonc.diff | 15 ++--- 26 files changed, 16 insertions(+), 503 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 3bcb76f443..4789bab77b 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -254,12 +254,14 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio contextSpanOpening := "<|" contextSpanClosing := "|>" oldGoToDefCommand := "getDefinitionAtPosition" + oldGoToDefComment := "/*GOTO DEF POS*/" replacer := strings.NewReplacer( contextSpanOpening, "", contextSpanClosing, "", testFilePrefix, "", serverTestFilePrefix, "", oldGoToDefCommand, string(goToDefinitionCmd), + oldGoToDefComment, "/*GOTO DEF*/", ) var defIdRegex = regexp.MustCompile(`{\| defId: [0-9]+ \|}`) detailsStr := "// === Details ===" diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff deleted file mode 100644 index 898d9535d9..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/declarationMapsOutOfDateMapping.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.declarationMapsOutOfDateMapping.baseline.jsonc -+++ new.declarationMapsOutOfDateMapping.baseline.jsonc -@@= skipped -4, +4 lines =@@ - // - - // === /home/src/workspaces/project/index.ts === --// import { Foo/*GOTO DEF POS*/ } from "a"; -+// import { Foo/*GOTO DEF*/ } from "a"; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff deleted file mode 100644 index 6f206248a9..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/definitionNameOnEnumMember.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.definitionNameOnEnumMember.baseline.jsonc -+++ new.definitionNameOnEnumMember.baseline.jsonc -@@= skipped -4, +4 lines =@@ - // secondMember, - // [|thirdMember|] - // } --// var enumMember = e./*GOTO DEF POS*/thirdMember; -+// var enumMember = e./*GOTO DEF*/thirdMember; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff deleted file mode 100644 index bd4b99d8cc..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- old.goToDefinitionAmbiants.baseline.jsonc -+++ new.goToDefinitionAmbiants.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // public method(); - // } - // --// /*GOTO DEF POS*/ambientVar = 1; -+// /*GOTO DEF*/ambientVar = 1; - // ambientFunction(); - // var ambientClassVariable = new ambientClass(); - // ambientClass.method(); -@@= skipped -19, +19 lines =@@ - // } - // - // ambientVar = 1; --// /*GOTO DEF POS*/ambientFunction(); -+// /*GOTO DEF*/ambientFunction(); - // var ambientClassVariable = new ambientClass(); - // ambientClass.method(); - // ambientClassVariable.method(); -@@= skipped -19, +19 lines =@@ - // - // ambientVar = 1; - // ambientFunction(); --// var ambientClassVariable = new /*GOTO DEF POS*/ambientClass(); -+// var ambientClassVariable = new /*GOTO DEF*/ambientClass(); - // ambientClass.method(); - // ambientClassVariable.method(); - -@@= skipped -19, +19 lines =@@ - // ambientVar = 1; - // ambientFunction(); - // var ambientClassVariable = new ambientClass(); --// ambientClass./*GOTO DEF POS*/method(); -+// ambientClass./*GOTO DEF*/method(); - // ambientClassVariable.method(); - - -@@= skipped -19, +19 lines =@@ - // ambientFunction(); - // var ambientClassVariable = new ambientClass(); - // ambientClass.method(); --// ambientClassVariable./*GOTO DEF POS*/method(); -+// ambientClassVariable./*GOTO DEF*/method(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff deleted file mode 100644 index 24dfcaa5a2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- old.goToDefinitionDifferentFile.baseline.jsonc -+++ new.goToDefinitionDifferentFile.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // module remoteModule{ export var foo = 1;} - - // === /goToDefinitionDifferentFile_Consumption.ts === --// /*GOTO DEF POS*/remoteVariable = 1; -+// /*GOTO DEF*/remoteVariable = 1; - // remoteFunction(); - // var foo = new remoteClass(); - // class fooCls implements remoteInterface { } -@@= skipped -18, +18 lines =@@ - - // === /goToDefinitionDifferentFile_Consumption.ts === - // remoteVariable = 1; --// /*GOTO DEF POS*/remoteFunction(); -+// /*GOTO DEF*/remoteFunction(); - // var foo = new remoteClass(); - // class fooCls implements remoteInterface { } - // var fooVar = remoteModule.foo; -@@= skipped -18, +18 lines =@@ - // === /goToDefinitionDifferentFile_Consumption.ts === - // remoteVariable = 1; - // remoteFunction(); --// var foo = new /*GOTO DEF POS*/remoteClass(); -+// var foo = new /*GOTO DEF*/remoteClass(); - // class fooCls implements remoteInterface { } - // var fooVar = remoteModule.foo; - -@@= skipped -18, +18 lines =@@ - // remoteVariable = 1; - // remoteFunction(); - // var foo = new remoteClass(); --// class fooCls implements /*GOTO DEF POS*/remoteInterface { } -+// class fooCls implements /*GOTO DEF*/remoteInterface { } - // var fooVar = remoteModule.foo; - - -@@= skipped -18, +18 lines =@@ - // remoteFunction(); - // var foo = new remoteClass(); - // class fooCls implements remoteInterface { } --// var fooVar = /*GOTO DEF POS*/remoteModule.foo; -+// var fooVar = /*GOTO DEF*/remoteModule.foo; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff deleted file mode 100644 index d99338e37c..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- old.goToDefinitionDifferentFileIndirectly.baseline.jsonc -+++ new.goToDefinitionDifferentFileIndirectly.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // module rem2Mod { export var foo; } - - // === /Definition.ts === --// /*GOTO DEF POS*/rem2Var = 1; -+// /*GOTO DEF*/rem2Var = 1; - // rem2Fn(); - // var rem2foo = new rem2Cls(); - // class rem2fooCls implements rem2Int { } -@@= skipped -18, +18 lines =@@ - - // === /Definition.ts === - // rem2Var = 1; --// /*GOTO DEF POS*/rem2Fn(); -+// /*GOTO DEF*/rem2Fn(); - // var rem2foo = new rem2Cls(); - // class rem2fooCls implements rem2Int { } - // var rem2fooVar = rem2Mod.foo; -@@= skipped -18, +18 lines =@@ - // === /Definition.ts === - // rem2Var = 1; - // rem2Fn(); --// var rem2foo = new /*GOTO DEF POS*/rem2Cls(); -+// var rem2foo = new /*GOTO DEF*/rem2Cls(); - // class rem2fooCls implements rem2Int { } - // var rem2fooVar = rem2Mod.foo; - -@@= skipped -18, +18 lines =@@ - // rem2Var = 1; - // rem2Fn(); - // var rem2foo = new rem2Cls(); --// class rem2fooCls implements /*GOTO DEF POS*/rem2Int { } -+// class rem2fooCls implements /*GOTO DEF*/rem2Int { } - // var rem2fooVar = rem2Mod.foo; - - -@@= skipped -18, +18 lines =@@ - // rem2Fn(); - // var rem2foo = new rem2Cls(); - // class rem2fooCls implements rem2Int { } --// var rem2fooVar = /*GOTO DEF POS*/rem2Mod.foo; -+// var rem2fooVar = /*GOTO DEF*/rem2Mod.foo; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff deleted file mode 100644 index 87f81c6155..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc.diff +++ /dev/null @@ -1,28 +0,0 @@ ---- old.goToDefinitionFunctionType.baseline.jsonc -+++ new.goToDefinitionFunctionType.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /goToDefinitionFunctionType.ts === - // const [|c|]: () => void; --// /*GOTO DEF POS*/c(); -+// /*GOTO DEF*/c(); - // function test(cb: () => void) { - // cb(); - // } -@@= skipped -13, +13 lines =@@ - // const c: () => void; - // c(); - // function test([|cb|]: () => void) { --// /*GOTO DEF POS*/cb(); -+// /*GOTO DEF*/cb(); - // } - // class C { - // prop: () => void; -@@= skipped -16, +16 lines =@@ - // class C { - // [|prop|]: () => void; - // m() { --// this./*GOTO DEF POS*/prop(); -+// this./*GOTO DEF*/prop(); - // } - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff deleted file mode 100644 index 518fab1389..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.goToDefinitionImplicitConstructor.baseline.jsonc -+++ new.goToDefinitionImplicitConstructor.baseline.jsonc -@@= skipped -1, +1 lines =@@ - // === /goToDefinitionImplicitConstructor.ts === - // class [|ImplicitConstructor|] { - // } --// var implicitConstructor = new /*GOTO DEF POS*/ImplicitConstructor(); -+// var implicitConstructor = new /*GOTO DEF*/ImplicitConstructor(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff deleted file mode 100644 index 1b9e9814e2..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- old.goToDefinitionInTypeArgument.baseline.jsonc -+++ new.goToDefinitionInTypeArgument.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // - // class [|Bar|] { } - // --// var x = new Foo(); -+// var x = new Foo(); - - - -@@= skipped -10, +10 lines =@@ - // - // class Bar { } - // --// var x = new Fo/*GOTO DEF POS*/o(); -+// var x = new Fo/*GOTO DEF*/o(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff deleted file mode 100644 index 4cab51dcee..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionInterfaceAfterImplement.baseline.jsonc -+++ new.goToDefinitionInterfaceAfterImplement.baseline.jsonc -@@= skipped -4, +4 lines =@@ - // sFn: () => void; - // } - // --// class iClass implements /*GOTO DEF POS*/sInt { -+// class iClass implements /*GOTO DEF*/sInt { - // public sVar = 1; - // public sFn() { - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff deleted file mode 100644 index 4ec56db94a..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- old.goToDefinitionObjectLiteralProperties.baseline.jsonc -+++ new.goToDefinitionObjectLiteralProperties.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // es6StyleMethod() { } - // }; - // --// o./*GOTO DEF POS*/value; -+// o./*GOTO DEF*/value; - // o.getter; - // o.setter; - // o.method; -@@= skipped -19, +19 lines =@@ - // }; - // - // o.value; --// o./*GOTO DEF POS*/getter; -+// o./*GOTO DEF*/getter; - // o.setter; - // o.method; - // o.es6StyleMethod; -@@= skipped -19, +19 lines =@@ - // - // o.value; - // o.getter; --// o./*GOTO DEF POS*/setter; -+// o./*GOTO DEF*/setter; - // o.method; - // o.es6StyleMethod; - -@@= skipped -19, +19 lines =@@ - // o.value; - // o.getter; - // o.setter; --// o./*GOTO DEF POS*/method; -+// o./*GOTO DEF*/method; - // o.es6StyleMethod; - - -@@= skipped -19, +19 lines =@@ - // o.getter; - // o.setter; - // o.method; --// o./*GOTO DEF POS*/es6StyleMethod; -+// o./*GOTO DEF*/es6StyleMethod; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff deleted file mode 100644 index 519a451e26..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- old.goToDefinitionSameFile.baseline.jsonc -+++ new.goToDefinitionSameFile.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // module localModule{ export var foo = 1;} - // - // --// /*GOTO DEF POS*/localVariable = 1; -+// /*GOTO DEF*/localVariable = 1; - // localFunction(); - // var foo = new localClass(); - // class fooCls implements localInterface { } -@@= skipped -18, +18 lines =@@ - // - // - // localVariable = 1; --// /*GOTO DEF POS*/localFunction(); -+// /*GOTO DEF*/localFunction(); - // var foo = new localClass(); - // class fooCls implements localInterface { } - // var fooVar = localModule.foo; -@@= skipped -18, +18 lines =@@ - // - // localVariable = 1; - // localFunction(); --// var foo = new /*GOTO DEF POS*/localClass(); -+// var foo = new /*GOTO DEF*/localClass(); - // class fooCls implements localInterface { } - // var fooVar = localModule.foo; - -@@= skipped -18, +18 lines =@@ - // localVariable = 1; - // localFunction(); - // var foo = new localClass(); --// class fooCls implements /*GOTO DEF POS*/localInterface { } -+// class fooCls implements /*GOTO DEF*/localInterface { } - // var fooVar = localModule.foo; - - -@@= skipped -18, +18 lines =@@ - // localFunction(); - // var foo = new localClass(); - // class fooCls implements localInterface { } --// var fooVar = /*GOTO DEF POS*/localModule.foo; -+// var fooVar = /*GOTO DEF*/localModule.foo; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff deleted file mode 100644 index afdbb212ba..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.goToDefinitionShadowVariable.baseline.jsonc -+++ new.goToDefinitionShadowVariable.baseline.jsonc -@@= skipped -2, +2 lines =@@ - // var shadowVariable = "foo"; - // function shadowVariableTestModule() { - // var [|shadowVariable|]; --// /*GOTO DEF POS*/shadowVariable = 1; -+// /*GOTO DEF*/shadowVariable = 1; - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff deleted file mode 100644 index cee48febe1..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.goToDefinitionShadowVariableInsideModule.baseline.jsonc -+++ new.goToDefinitionShadowVariableInsideModule.baseline.jsonc -@@= skipped -1, +1 lines =@@ - // === /goToDefinitionShadowVariableInsideModule.ts === - // module shdModule { - // var [|shdVar|]; --// /*GOTO DEF POS*/shdVar = 1; -+// /*GOTO DEF*/shdVar = 1; - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff index e14f9de235..474ad9e4cf 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff @@ -1,24 +1,6 @@ --- old.gotoDefinitionLinkTag1.baseline.jsonc +++ new.gotoDefinitionLinkTag1.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // baz: Foo - // } - // } --// /** {@link /*GOTO DEF POS*/Foo} foooo*/ -+// /** {@link /*GOTO DEF*/Foo} foooo*/ - // const a = "" - // /** {@link NS.Bar} ns.bar*/ - // const b = "" -@@= skipped -20, +20 lines =@@ - // } - // /** {@link Foo} foooo*/ - // const a = "" --// /** {@link NS./*GOTO DEF POS*/Bar} ns.bar*/ -+// /** {@link NS./*GOTO DEF*/Bar} ns.bar*/ - // const b = "" - // /** {@link Foo f1}*/ - // const c = "" -@@= skipped -14, +14 lines =@@ +@@= skipped -41, +41 lines =@@ // foo: string // } // namespace NS { @@ -33,30 +15,7 @@ // const a = "" // /** {@link NS.Bar} ns.bar*/ // const b = "" --// /** {@link /*GOTO DEF POS*/Foo f1}*/ -+// /** {@link /*GOTO DEF*/Foo f1}*/ - // const c = "" - // /** {@link NS.Bar ns.bar}*/ - // const d = "" -@@= skipped -32, +30 lines =@@ - // const b = "" - // /** {@link Foo f1}*/ - // const c = "" --// /** {@link NS./*GOTO DEF POS*/Bar ns.bar}*/ -+// /** {@link NS./*GOTO DEF*/Bar ns.bar}*/ - // const d = "" - // /** {@link d }dd*/ - // const e = "" -@@= skipped -16, +16 lines =@@ - // const c = "" - // /** {@link NS.Bar ns.bar}*/ - // const [|d|] = "" --// /** {@link /*GOTO DEF POS*/d }dd*/ -+// /** {@link /*GOTO DEF*/d }dd*/ - // const e = "" - // /** @param x {@link Foo} */ - // function foo(x) { } -@@= skipped -13, +13 lines =@@ +@@= skipped -61, +59 lines =@@ // foo: string // } // namespace NS { @@ -67,13 +26,6 @@ // --- (line: 15) skipped --- // const d = "" - // /** {@link d }dd*/ - // const e = "" --// /** @param x {@link /*GOTO DEF POS*/Foo} */ -+// /** @param x {@link /*GOTO DEF*/Foo} */ - // function foo(x) { } - - @@= skipped -19, +17 lines =@@ // foo: string // } @@ -84,6 +36,4 @@ +// --- (line: 5) skipped --- // === /bar.ts === --// /** {@link /*GOTO DEF POS*/Foo }dd*/ -+// /** {@link /*GOTO DEF*/Foo }dd*/ - // const f = "" \ No newline at end of file + // /** {@link /*GOTO DEF*/Foo }dd*/ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff deleted file mode 100644 index 89254eca89..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag2.baseline.jsonc.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- old.gotoDefinitionLinkTag2.baseline.jsonc -+++ new.gotoDefinitionLinkTag2.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /gotoDefinitionLinkTag2.ts === - // enum E { --// /** {@link /*GOTO DEF POS*/A} */ -+// /** {@link /*GOTO DEF*/A} */ - // [|A|] - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff index 37403b17ed..b7793cf9f9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff @@ -1,12 +1,10 @@ --- old.gotoDefinitionLinkTag3.baseline.jsonc +++ new.gotoDefinitionLinkTag3.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === +@@= skipped -1, +1 lines =@@ // === /a.ts === // enum E { --// /** {@link /*GOTO DEF POS*/Foo} */ + // /** {@link /*GOTO DEF*/Foo} */ -// Foo -+// /** {@link /*GOTO DEF*/Foo} */ +// [|Foo|] // } -// interface [|Foo|] { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff index 522e7c4824..e9b88b9916 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff @@ -9,8 +9,7 @@ - // === /b.ts === // enum E { --// /** {@link /*GOTO DEF POS*/Foo} */ + // /** {@link /*GOTO DEF*/Foo} */ -// Foo -+// /** {@link /*GOTO DEF*/Foo} */ +// [|Foo|] // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff deleted file mode 100644 index b6bf8fea12..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag5.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.gotoDefinitionLinkTag5.baseline.jsonc -+++ new.gotoDefinitionLinkTag5.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /gotoDefinitionLinkTag5.ts === - // enum E { --// /** {@link /*GOTO DEF POS*/B} */ -+// /** {@link /*GOTO DEF*/B} */ - // A, - // [|B|] - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff deleted file mode 100644 index c55c84fc71..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag6.baseline.jsonc.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- old.gotoDefinitionLinkTag6.baseline.jsonc -+++ new.gotoDefinitionLinkTag6.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /gotoDefinitionLinkTag6.ts === - // enum E { --// /** {@link E./*GOTO DEF POS*/A} */ -+// /** {@link E./*GOTO DEF*/A} */ - // [|A|] - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff deleted file mode 100644 index a3076654a4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.gotoDefinitionSatisfiesTag.baseline.jsonc -+++ new.gotoDefinitionSatisfiesTag.baseline.jsonc -@@= skipped -4, +4 lines =@@ - // * @property {number} a - // */ - // --// /** @satisfies {/*GOTO DEF POS*/T} comment */ -+// /** @satisfies {/*GOTO DEF*/T} comment */ - // const foo = { a: 1 }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff index f2bd343422..97d5f126e9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff @@ -7,7 +7,4 @@ +// class E extends Error {} // // /** --// * @throws {/*GOTO DEF POS*/E} -+// * @throws {/*GOTO DEF*/E} - // */ - // function f() {} \ No newline at end of file + // * @throws {/*GOTO DEF*/E} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff index a6476eda84..217dc23c0f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff @@ -1,24 +1,6 @@ --- old.jsDocSee1.baseline.jsonc +++ new.jsDocSee1.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // baz: Foo - // } - // } --// /** @see {/*GOTO DEF POS*/Foo} foooo*/ -+// /** @see {/*GOTO DEF*/Foo} foooo*/ - // const a = "" - // /** @see {NS.Bar} ns.bar*/ - // const b = "" -@@= skipped -20, +20 lines =@@ - // } - // /** @see {Foo} foooo*/ - // const a = "" --// /** @see {NS./*GOTO DEF POS*/Bar} ns.bar*/ -+// /** @see {NS./*GOTO DEF*/Bar} ns.bar*/ - // const b = "" - // /** @see Foo f1*/ - // const c = "" -@@= skipped -14, +14 lines =@@ +@@= skipped -41, +41 lines =@@ // foo: string // } // namespace NS { @@ -32,25 +14,4 @@ +// --- (line: 9) skipped --- // const a = "" // /** @see {NS.Bar} ns.bar*/ - // const b = "" --// /** @see /*GOTO DEF POS*/Foo f1*/ -+// /** @see /*GOTO DEF*/Foo f1*/ - // const c = "" - // /** @see NS.Bar ns.bar*/ - // const d = "" -@@= skipped -33, +31 lines =@@ - // const b = "" - // /** @see Foo f1*/ - // const c = "" --// /** @see NS./*GOTO DEF POS*/Bar ns.bar*/ -+// /** @see NS./*GOTO DEF*/Bar ns.bar*/ - // const d = "" - // /** @see d dd*/ - // const e = "" -@@= skipped -14, +14 lines =@@ - // const c = "" - // /** @see NS.Bar ns.bar*/ - // const [|d|] = "" --// /** @see /*GOTO DEF POS*/d dd*/ -+// /** @see /*GOTO DEF*/d dd*/ - // const e = "" \ No newline at end of file + // const b = "" \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff index 52c64c134d..834e2f1938 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff @@ -6,8 +6,7 @@ -// function foo (a: string) { +// function foo ([|a|]: string) { // /** --// * @see {/*GOTO DEF POS*/a} -+// * @see {/*GOTO DEF*/a} + // * @see {/*GOTO DEF*/a} // */ -// function bar ([|a|]: string) { +// function bar (a: string) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff deleted file mode 100644 index 831c8bd20d..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc.diff +++ /dev/null @@ -1,28 +0,0 @@ ---- old.jsDocSee4.baseline.jsonc -+++ new.jsDocSee4.baseline.jsonc -@@= skipped -4, +4 lines =@@ - // } - // declare const a: A; - // /** --// * @see {/*GOTO DEF POS*/A#foo} -+// * @see {/*GOTO DEF*/A#foo} - // */ - // const t1 = 1 - // /** -@@= skipped -19, +19 lines =@@ - // */ - // const t1 = 1 - // /** --// * @see {/*GOTO DEF POS*/a.foo()} -+// * @see {/*GOTO DEF*/a.foo()} - // */ - // const t2 = 1 - // /** -@@= skipped -23, +23 lines =@@ - // */ - // const t2 = 1 - // /** --// * @see {@link /*GOTO DEF POS*/a.foo()} -+// * @see {@link /*GOTO DEF*/a.foo()} - // */ - // const t3 = 1 \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff index 440492a281..731ad9f4e4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff @@ -1,12 +1,9 @@ --- old.reallyLargeFile.baseline.jsonc +++ new.reallyLargeFile.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /file.d.ts === --// namespace /*GOTO DEF POS*/[|Foo|] { --// --// --// +@@= skipped -3, +3 lines =@@ + // + // + // -// -// -// @@ -583709,8 +583706,4 @@ -// -// -// } -+// namespace /*GOTO DEF*/[|Foo|] { -+// -+// -+// +// --- (line: 5) skipped --- \ No newline at end of file From 07a51db26d0bcc52658efc5c3be43578c15f1b6e Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Tue, 18 Nov 2025 09:19:39 -0800 Subject: [PATCH 07/12] fully remove object range when diffing --- internal/fourslash/baselineutil.go | 4 +- .../goToDefinitionAwait4.baseline.jsonc.diff | 11 ---- ...itionClassStaticBlocks.baseline.jsonc.diff | 6 +- ...onExpandoElementAccess.baseline.jsonc.diff | 8 --- ...ionExternalModuleName5.baseline.jsonc.diff | 9 --- ...initionJsModuleExports.baseline.jsonc.diff | 4 +- ...oToDefinitionJsxNotSet.baseline.jsonc.diff | 10 ---- .../goToDefinitionMember.baseline.jsonc.diff | 9 --- ...oToDefinitionModifiers.baseline.jsonc.diff | 57 +------------------ ...onSatisfiesExpression1.baseline.jsonc.diff | 11 ---- ...oDefinitionSwitchCase6.baseline.jsonc.diff | 8 --- ...tionVariableAssignment.baseline.jsonc.diff | 2 +- ...ionVariableAssignment1.baseline.jsonc.diff | 2 +- ...ionVariableAssignment2.baseline.jsonc.diff | 2 +- ...ionVariableAssignment3.baseline.jsonc.diff | 2 +- .../goToDefinitionYield1.baseline.jsonc.diff | 10 ---- ...eDefinition_returnType.baseline.jsonc.diff | 2 +- 17 files changed, 13 insertions(+), 144 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 4789bab77b..6426b07e3b 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -263,7 +263,7 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio oldGoToDefCommand, string(goToDefinitionCmd), oldGoToDefComment, "/*GOTO DEF*/", ) - var defIdRegex = regexp.MustCompile(`{\| defId: [0-9]+ \|}`) + var objectRangeRegex = regexp.MustCompile(`{\| [^|]* \|}`) detailsStr := "// === Details ===" lines := strings.Split(s, "\n") var isInCommand bool @@ -289,7 +289,7 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio // We don't diff the details section, since the structure of responses is different. if !isInDetails { fixedLine := replacer.Replace(line) - fixedLine = defIdRegex.ReplaceAllString(fixedLine, "") + fixedLine = objectRangeRegex.ReplaceAllString(fixedLine, "") commandLines = append(commandLines, fixedLine) } else if line == " ]" { isInDetails = false diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff deleted file mode 100644 index 57e51656bf..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionAwait4.baseline.jsonc -+++ new.goToDefinitionAwait4.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /goToDefinitionAwait4.ts === - // async function outerAsyncFun() { --// let [|{| contextId: 0 |}af|] = async () => { -+// let [|af|] = async () => { - // /*GOTO DEF*/await Promise.resolve(0); - // } - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff index 3d960818bf..af5f3287b1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === /goToDefinitionClassStaticBlocks.ts === // class ClassStaticBocks { // static x; --// /*GOTO DEF*/[|{| textSpan: true, defId: 0 |}static|] {} +-// /*GOTO DEF*/[|static|] {} -// static y; -// [|static|] {} -// static y; @@ -19,7 +19,7 @@ -// static x; -// [|static|] {} -// static y; --// /*GOTO DEF*/[|{| textSpan: true, defId: 1 |}static|] {} +-// /*GOTO DEF*/[|static|] {} -// static y; -// [|static|] {} -// } @@ -34,7 +34,7 @@ -// static y; -// [|static|] {} -// static y; --// /*GOTO DEF*/[|{| textSpan: true, defId: 2 |}static|] {} +-// /*GOTO DEF*/[|static|] {} +// /*GOTO DEF*/static {} +// static y; +// static {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff deleted file mode 100644 index a3d94cc4b8..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.goToDefinitionExpandoElementAccess.baseline.jsonc -+++ new.goToDefinitionExpandoElementAccess.baseline.jsonc -@@= skipped -1, +1 lines =@@ - // === /goToDefinitionExpandoElementAccess.ts === - // function f() {} - // f[[|"x"|]] = 0; --// f[/*GOTO DEF*/[|{| textSpan: true, defId: 1 |}"x"|]] = 1; -+// f[/*GOTO DEF*/[|"x"|]] = 1; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff deleted file mode 100644 index a4a4c09881..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.goToDefinitionExternalModuleName5.baseline.jsonc -+++ new.goToDefinitionExternalModuleName5.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /a.ts === --// declare module [|{| textSpan: true |}"external/*GOTO DEF*/"|] { -+// declare module [|"external/*GOTO DEF*/"|] { - // class Foo { } - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff index 5fd950c286..89135406a0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.js === --// x.[|{| contextId: 0 |}test|] = () => { } +-// x.[|test|] = () => { } +// x.test = () => { } // x./*GOTO DEF*/test(); // x.test3 = function () { } @@ -12,6 +12,6 @@ // === /foo.js === // x.test = () => { } // x.test(); --// x.[|{| contextId: 0 |}test3|] = function () { } +-// x.[|test3|] = function () { } +// x.test3 = function () { } // x./*GOTO DEF*/test3(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff deleted file mode 100644 index a386007e41..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- old.goToDefinitionJsxNotSet.baseline.jsonc -+++ new.goToDefinitionJsxNotSet.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /foo.jsx === --// const [|{| contextId: 0 |}Foo|] = () => ( -+// const [|Foo|] = () => ( - //
foo
- // ); - // export default Foo; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff deleted file mode 100644 index fc0bf093dd..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.goToDefinitionMember.baseline.jsonc -+++ new.goToDefinitionMember.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /a.ts === - // class A { --// private [|{| textSpan: true |}z|]/*GOTO DEF*/: string; -+// private [|z|]/*GOTO DEF*/: string; - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff index 5ac8a743fe..ca26184597 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff @@ -18,10 +18,7 @@ - // === goToDefinition === - // === /a.ts === --// export class [|{| textSpan: true |}A|]/*GOTO DEF*/ { -+// export class [|A|]/*GOTO DEF*/ { +@@= skipped -19, +10 lines =@@ // // private z: string; // @@ -38,55 +35,3 @@ +// --- (line: 5) skipped --- - -@@= skipped -48, +30 lines =@@ - // === /a.ts === - // export class A { - // --// private [|{| textSpan: true |}z|]/*GOTO DEF*/: string; -+// private [|z|]/*GOTO DEF*/: string; - // - // readonly x: string; - // -@@= skipped -28, +28 lines =@@ - // - // private z: string; - // --// readonly [|{| textSpan: true |}x|]/*GOTO DEF*/: string; -+// readonly [|x|]/*GOTO DEF*/: string; - // - // async a() { } - // -@@= skipped -28, +28 lines =@@ - // - // readonly x: string; - // --// async [|{| textSpan: true |}a|]/*GOTO DEF*/() { } -+// async [|a|]/*GOTO DEF*/() { } - // - // override b() {} - // -@@= skipped -29, +29 lines =@@ - // - // async a() { } - // --// override [|{| textSpan: true |}b|]/*GOTO DEF*/() {} -+// override [|b|]/*GOTO DEF*/() {} - // - // public async c() { } - // } -@@= skipped -54, +54 lines =@@ - // - // override b() {} - // --// public async [|{| textSpan: true |}c|]/*GOTO DEF*/() { } -+// public async [|c|]/*GOTO DEF*/() { } - // } - // - // export function foo() { } -@@= skipped -23, +23 lines =@@ - // public async c() { } - // } - // --// export function [|{| textSpan: true |}foo|]/*GOTO DEF*/() { } -+// export function [|foo|]/*GOTO DEF*/() { } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff deleted file mode 100644 index e38aebe242..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- old.goToDefinitionSatisfiesExpression1.baseline.jsonc -+++ new.goToDefinitionSatisfiesExpression1.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /goToDefinitionSatisfiesExpression1.ts === - // const STRINGS = { --// /*GOTO DEF*/[|{| textSpan: true |}title|]: 'A Title', -+// /*GOTO DEF*/[|title|]: 'A Title', - // } satisfies Record; - // - // //somewhere in app \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff index 297b9e0989..5975f1277c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase6.baseline.jsonc.diff @@ -1,13 +1,5 @@ --- old.goToDefinitionSwitchCase6.baseline.jsonc +++ new.goToDefinitionSwitchCase6.baseline.jsonc -@@= skipped -0, +0 lines =@@ - // === goToDefinition === - // === /goToDefinitionSwitchCase6.ts === --// export default { /*GOTO DEF*/[|{| textSpan: true |}case|] }; -+// export default { /*GOTO DEF*/[|case|] }; - // default; - // case 42; - @@= skipped -7, +7 lines =@@ // === goToDefinition === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff index 63e720b99c..0ce8f6ebc9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === goToDefinition === // === /foo.js === // const Bar; --// const Foo = [|{| contextId: 0 |}Bar|] = function () {} +-// const Foo = [|Bar|] = function () {} +// const [|Foo|] = [|Bar|] = function () {} // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff index da4919f33a..5637529236 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.js === --// const Foo = module.[|{| contextId: 0 |}exports|] = function () {} +-// const Foo = module.[|exports|] = function () {} +// const [|Foo|] = module.[|exports|] = function () {} // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff index fd8556f28d..346f2a71ac 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === goToDefinition === // === /foo.ts === // const Bar; --// const Foo = [|{| contextId: 0 |}Bar|] = function () {} +-// const Foo = [|Bar|] = function () {} +// const [|Foo|] = [|Bar|] = function () {} // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff index 7f43425fc8..4d5bfb86a0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.ts === --// const Foo = module.[|{| contextId: 0 |}exports|] = function () {} +-// const Foo = module.[|exports|] = function () {} +// const [|Foo|] = module.[|exports|] = function () {} // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff deleted file mode 100644 index c5d0a0391a..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- old.goToDefinitionYield1.baseline.jsonc -+++ new.goToDefinitionYield1.baseline.jsonc -@@= skipped -15, +15 lines =@@ - // yield 0; - // } - // --// const [|{| contextId: 0 |}genFunction|] = function*() { -+// const [|genFunction|] = function*() { - // /*GOTO DEF*/yield 0; - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff index 782e9e3347..28b440da8e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff @@ -8,7 +8,7 @@ -// -// const f6 = (i: I, j: J, b: boolean) => b ? i : j; -// --// const [|{| contextId: 0 |}f7|] = (i: I) => {}; +-// const [|f7|] = (i: I) => {}; -// -// function f8(i: I): I; -// function f8(j: J): J; From 2d9f80f75ac64a86d634e142516f5abfd6c87d0e Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Tue, 18 Nov 2025 10:39:46 -0800 Subject: [PATCH 08/12] visit lib files in fourslash baseline --- internal/bundled/embed.go | 2 +- internal/fourslash/baselineutil.go | 13 +- ...ShorthandPropertyAssignment.baseline.jsonc | 24 ++ ...gElementInitializerExternal.baseline.jsonc | 74 +++- ...entInitializerExternal.baseline.jsonc.diff | 331 +++++++++++++++--- ...finitionShorthandProperty01.baseline.jsonc | 12 + ...ionShorthandProperty01.baseline.jsonc.diff | 12 + ...oToTypeDefinitionImportMeta.baseline.jsonc | 24 ++ ...peDefinitionImportMeta.baseline.jsonc.diff | 33 ++ ...goToTypeDefinitionModifiers.baseline.jsonc | 72 ++++ ...ypeDefinitionModifiers.baseline.jsonc.diff | 144 ++++---- .../goToTypeDefinition_Pick.baseline.jsonc | 28 ++ ...oToTypeDefinition_Pick.baseline.jsonc.diff | 36 +- ...oToTypeDefinition_arrayType.baseline.jsonc | 46 +++ ...peDefinition_arrayType.baseline.jsonc.diff | 82 +++-- ...oTypeDefinition_promiseType.baseline.jsonc | 26 +- ...Definition_promiseType.baseline.jsonc.diff | 46 +-- 17 files changed, 801 insertions(+), 204 deletions(-) create mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff diff --git a/internal/bundled/embed.go b/internal/bundled/embed.go index 36c00137b2..2ec7bf83e1 100644 --- a/internal/bundled/embed.go +++ b/internal/bundled/embed.go @@ -131,7 +131,7 @@ func (vfs *wrappedFS) walkDir(rest string, walkFn vfs.WalkDirFunc) error { return err } if entry.IsDir() { - if err := vfs.walkDir(name, walkFn); err != nil { + if err := vfs.walkDir(entry.Name(), walkFn); err != nil { return err } } diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 6426b07e3b..08dc1def60 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -298,6 +298,9 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio } return strings.Join(commandLines, "\n") }, + DiffFixupNew: func(s string) string { + return strings.ReplaceAll(s, "bundled:///libs/", "") + }, } default: return baseline.Options{ @@ -351,7 +354,7 @@ func (f *FourslashTest) getBaselineForGroupedLocationsWithFileContents(groupedRa foundAdditionalLocation := false baselineEntries := []string{} - err := f.vfs.WalkDir("/", func(path string, d vfs.DirEntry, e error) error { + walkDirFn := func(path string, d vfs.DirEntry, e error) error { if e != nil { return e } @@ -382,8 +385,14 @@ func (f *FourslashTest) getBaselineForGroupedLocationsWithFileContents(groupedRa baselineEntries = append(baselineEntries, f.getBaselineContentForFile(path, content, ranges, nil, options)) return nil - }) + } + + err := f.vfs.WalkDir("/", walkDirFn) + if err != nil && !errors.Is(err, fs.ErrNotExist) { + panic("walkdir error during fourslash baseline: " + err.Error()) + } + err = f.vfs.WalkDir("bundled:///", walkDirFn) if err != nil && !errors.Is(err, fs.ErrNotExist) { panic("walkdir error during fourslash baseline: " + err.Error()) } diff --git a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment.baseline.jsonc index 1666c1f148..c40b21b16c 100644 --- a/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment.baseline.jsonc +++ b/testdata/baselines/reference/fourslash/findAllReferences/findAllRefsWithShorthandPropertyAssignment.baseline.jsonc @@ -16,6 +16,18 @@ // var obj1 = { name: /*FIND ALL REFS*/[|name|] }; // obj.name; +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/name) +// */ +// /** @deprecated */ +// declare const [|name|]: void; +// /** +// * The **`Window.navigator`** read-only property returns a reference to the Navigator object, which has methods and properties about the application running the script. +// * +// --- (line: --) skipped --- +// + // === findAllReferences === @@ -26,6 +38,18 @@ // var obj1 = { name: [|name|] }; // obj.[|name|]; +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/name) +// */ +// /** @deprecated */ +// declare const [|name|]: void; +// /** +// * The **`Window.navigator`** read-only property returns a reference to the Navigator object, which has methods and properties about the application running the script. +// * +// --- (line: --) skipped --- +// + // === findAllReferences === diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc index 054862bb38..e0664feded 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc @@ -24,6 +24,18 @@ // oldName: newName = [|externalRENAME|] // } = obj; +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) +// */ +// declare var [|externalRENAME|]: External; +// /** +// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. +// * +// --- (line: --) skipped --- +// + // === findRenameLocations === @@ -42,6 +54,18 @@ // oldName: newName = [|externalRENAME|] // } = obj; +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) +// */ +// declare var [|externalRENAME|]: External; +// /** +// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. +// * +// --- (line: --) skipped --- +// + // === findRenameLocations === @@ -60,6 +84,18 @@ // oldName: newName = [|externalRENAME|] // } = obj; +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) +// */ +// declare var [|externalRENAME|]: External; +// /** +// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. +// * +// --- (line: --) skipped --- +// + // === findRenameLocations === @@ -78,6 +114,18 @@ // oldName: newName = [|externalRENAME|] // } = obj; +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) +// */ +// declare var [|externalRENAME|]: External; +// /** +// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. +// * +// --- (line: --) skipped --- +// + // === findRenameLocations === @@ -96,6 +144,18 @@ // oldName: newName = [|externalRENAME|] // } = obj; +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) +// */ +// declare var [|externalRENAME|]: External; +// /** +// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. +// * +// --- (line: --) skipped --- +// + // === findRenameLocations === @@ -112,4 +172,16 @@ // lvl1 = [|externalRENAME|], // nested: { lvl2 = [|externalRENAME|]}, // oldName: newName = /*RENAME*/[|externalRENAME|] -// } = obj; \ No newline at end of file +// } = obj; + +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) +// */ +// declare var [|externalRENAME|]: External; +// /** +// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. +// * +// --- (line: --) skipped --- +// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff index d15fbd63f5..a557cecec2 100644 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameBindingElementInitializerExternal.baseline.jsonc.diff @@ -14,60 +14,293 @@ -// nested: { lvl2 = [|externalRENAME|]}, -// oldName: newName = [|externalRENAME|] -// } = obj; +- +- +- +-// === findRenameLocations === +-// === /renameBindingElementInitializerExternal.ts === +-// const [|externalRENAME|] = true; +-// +-// function f({ +-// lvl1 = /*RENAME*/[|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// }) {} +-// +-// const { +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// } = obj; +- +- +- +-// === findRenameLocations === +-// === /renameBindingElementInitializerExternal.ts === +-// const [|externalRENAME|] = true; +-// +-// function f({ +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = /*RENAME*/[|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// }) {} +-// +-// const { +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// } = obj; +- +- +- +-// === findRenameLocations === +-// === /renameBindingElementInitializerExternal.ts === +-// const [|externalRENAME|] = true; +-// +-// function f({ +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = /*RENAME*/[|externalRENAME|] +-// }) {} +-// +-// const { +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// } = obj; +- +- +- +-// === findRenameLocations === +-// === /renameBindingElementInitializerExternal.ts === +-// const [|externalRENAME|] = true; +-// +-// function f({ +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// }) {} +-// +-// const { +-// lvl1 = /*RENAME*/[|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// } = obj; +- +- +- +-// === findRenameLocations === +-// === /renameBindingElementInitializerExternal.ts === +-// const [|externalRENAME|] = true; +-// +-// function f({ +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// }) {} +-// +-// const { +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = /*RENAME*/[|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// } = obj; +- +- +- +-// === findRenameLocations === +-// === /renameBindingElementInitializerExternal.ts === +-// const [|externalRENAME|] = true; +-// +-// function f({ +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = [|externalRENAME|] +-// }) {} +-// +-// const { +-// lvl1 = [|externalRENAME|], +-// nested: { lvl2 = [|externalRENAME|]}, +-// oldName: newName = /*RENAME*/[|externalRENAME|] +-// } = obj; +// lvl1 = external, +// --- (line: 5) skipped --- - - - - // === findRenameLocations === - // === /renameBindingElementInitializerExternal.ts === --// const [|externalRENAME|] = true; ++ ++ ++ ++// === findRenameLocations === ++// === /renameBindingElementInitializerExternal.ts === +// const external = true; - // - // function f({ - // lvl1 = /*RENAME*/[|externalRENAME|], -@@= skipped -33, +25 lines =@@ - - // === findRenameLocations === - // === /renameBindingElementInitializerExternal.ts === --// const [|externalRENAME|] = true; ++// ++// function f({ ++// lvl1 = /*RENAME*/[|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// }) {} ++// ++// const { ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// } = obj; ++ ++// === bundled:///libs/lib.dom.d.ts === ++// --- (line: --) skipped --- ++// * ++// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) ++// */ ++// declare var [|externalRENAME|]: External; ++// /** ++// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. ++// * ++// --- (line: --) skipped --- ++// ++ ++ ++ ++// === findRenameLocations === ++// === /renameBindingElementInitializerExternal.ts === +// const external = true; - // - // function f({ - // lvl1 = [|externalRENAME|], -@@= skipped -18, +18 lines =@@ - - // === findRenameLocations === - // === /renameBindingElementInitializerExternal.ts === --// const [|externalRENAME|] = true; ++// ++// function f({ ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = /*RENAME*/[|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// }) {} ++// ++// const { ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// } = obj; ++ ++// === bundled:///libs/lib.dom.d.ts === ++// --- (line: --) skipped --- ++// * ++// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) ++// */ ++// declare var [|externalRENAME|]: External; ++// /** ++// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. ++// * ++// --- (line: --) skipped --- ++// ++ ++ ++ ++// === findRenameLocations === ++// === /renameBindingElementInitializerExternal.ts === +// const external = true; - // - // function f({ - // lvl1 = [|externalRENAME|], -@@= skipped -18, +18 lines =@@ - - // === findRenameLocations === - // === /renameBindingElementInitializerExternal.ts === --// const [|externalRENAME|] = true; ++// ++// function f({ ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = /*RENAME*/[|externalRENAME|] ++// }) {} ++// ++// const { ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// } = obj; ++ ++// === bundled:///libs/lib.dom.d.ts === ++// --- (line: --) skipped --- ++// * ++// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) ++// */ ++// declare var [|externalRENAME|]: External; ++// /** ++// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. ++// * ++// --- (line: --) skipped --- ++// ++ ++ ++ ++// === findRenameLocations === ++// === /renameBindingElementInitializerExternal.ts === +// const external = true; - // - // function f({ - // lvl1 = [|externalRENAME|], -@@= skipped -18, +18 lines =@@ - - // === findRenameLocations === - // === /renameBindingElementInitializerExternal.ts === --// const [|externalRENAME|] = true; ++// ++// function f({ ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// }) {} ++// ++// const { ++// lvl1 = /*RENAME*/[|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// } = obj; ++ ++// === bundled:///libs/lib.dom.d.ts === ++// --- (line: --) skipped --- ++// * ++// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) ++// */ ++// declare var [|externalRENAME|]: External; ++// /** ++// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. ++// * ++// --- (line: --) skipped --- ++// ++ ++ ++ ++// === findRenameLocations === ++// === /renameBindingElementInitializerExternal.ts === +// const external = true; - // - // function f({ - // lvl1 = [|externalRENAME|], -@@= skipped -18, +18 lines =@@ - - // === findRenameLocations === - // === /renameBindingElementInitializerExternal.ts === --// const [|externalRENAME|] = true; ++// ++// function f({ ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// }) {} ++// ++// const { ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = /*RENAME*/[|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// } = obj; ++ ++// === bundled:///libs/lib.dom.d.ts === ++// --- (line: --) skipped --- ++// * ++// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) ++// */ ++// declare var [|externalRENAME|]: External; ++// /** ++// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. ++// * ++// --- (line: --) skipped --- ++// ++ ++ ++ ++// === findRenameLocations === ++// === /renameBindingElementInitializerExternal.ts === +// const external = true; - // - // function f({ - // lvl1 = [|externalRENAME|], \ No newline at end of file ++// ++// function f({ ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = [|externalRENAME|] ++// }) {} ++// ++// const { ++// lvl1 = [|externalRENAME|], ++// nested: { lvl2 = [|externalRENAME|]}, ++// oldName: newName = /*RENAME*/[|externalRENAME|] ++// } = obj; ++ ++// === bundled:///libs/lib.dom.d.ts === ++// --- (line: --) skipped --- ++// * ++// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/external) ++// */ ++// declare var [|externalRENAME|]: External; ++// /** ++// * The **`Window.frameElement`** property returns the element (such as iframe or object) in which the window is embedded. ++// * ++// --- (line: --) skipped --- ++// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc index 6af236d0da..d6e9222dfc 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc @@ -1,4 +1,16 @@ // === goToDefinition === +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/name) +// */ +// /** @deprecated */ +// declare const [|name|]: void; +// /** +// * The **`Window.navigator`** read-only property returns a reference to the Navigator object, which has methods and properties about the application running the script. +// * +// --- (line: --) skipped --- +// + // === /goToDefinitionShorthandProperty01.ts === // var name = "hello"; // var id = 100000; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff index 28da289cff..9598e225ba 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff @@ -2,6 +2,18 @@ +++ new.goToDefinitionShorthandProperty01.baseline.jsonc @@= skipped -0, +0 lines =@@ // === goToDefinition === ++// === lib.dom.d.ts === ++// --- (line: --) skipped --- ++// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/name) ++// */ ++// /** @deprecated */ ++// declare const [|name|]: void; ++// /** ++// * The **`Window.navigator`** read-only property returns a reference to the Navigator object, which has methods and properties about the application running the script. ++// * ++// --- (line: --) skipped --- ++// ++ // === /goToDefinitionShorthandProperty01.ts === -// var [|name|] = "hello"; +// var name = "hello"; diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc index 11fd9f4d3d..0d75f4d2ea 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc @@ -3,6 +3,30 @@ // interface [|ImportMeta|] { // } +// === bundled:///libs/lib.dom.d.ts === +// --- (line: --) skipped --- +// new(): ImageTrackList; +// }; +// +// interface [|ImportMeta|] { +// url: string; +// resolve(specifier: string): string; +// } +// --- (line: --) skipped --- +// + +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// * If you need to declare that a given property exists on `import.meta`, +// * this type may be augmented via interface merging. +// */ +// interface [|ImportMeta|] { +// } +// +// /** +// --- (line: --) skipped --- +// + // === /foo.ts === // /// // /// diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff new file mode 100644 index 0000000000..d474a1031d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff @@ -0,0 +1,33 @@ +--- old.goToTypeDefinitionImportMeta.baseline.jsonc ++++ new.goToTypeDefinitionImportMeta.baseline.jsonc +@@= skipped -2, +2 lines =@@ + // interface [|ImportMeta|] { + // } + ++// === lib.dom.d.ts === ++// --- (line: --) skipped --- ++// new(): ImageTrackList; ++// }; ++// ++// interface [|ImportMeta|] { ++// url: string; ++// resolve(specifier: string): string; ++// } ++// --- (line: --) skipped --- ++// ++ ++// === lib.es5.d.ts === ++// --- (line: --) skipped --- ++// * If you need to declare that a given property exists on `import.meta`, ++// * this type may be augmented via interface merging. ++// */ ++// interface [|ImportMeta|] { ++// } ++// ++// /** ++// --- (line: --) skipped --- ++// ++ + // === /foo.ts === + // /// + // /// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc index f7107255c2..6ef4ffde5f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc @@ -99,6 +99,18 @@ // === goToType === +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// + // === /a.ts === // --- (line: 5) skipped --- // @@ -113,6 +125,18 @@ // === goToType === +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// + // === /a.ts === // --- (line: 5) skipped --- // @@ -157,6 +181,18 @@ // === goToType === +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// + // === /a.ts === // --- (line: 9) skipped --- // @@ -170,6 +206,18 @@ // === goToType === +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// + // === /a.ts === // --- (line: 9) skipped --- // @@ -183,6 +231,18 @@ // === goToType === +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// + // === /a.ts === // --- (line: 9) skipped --- // @@ -196,6 +256,18 @@ // === goToType === +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// + // === /a.ts === // --- (line: 9) skipped --- // diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff index 5c689cdaa8..f9692c2c03 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff @@ -77,14 +77,14 @@ // === goToType === -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -100,24 +100,24 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + // === /a.ts === // --- (line: 5) skipped --- - // -@@= skipped -40, +14 lines =@@ +@@= skipped -31, +17 lines =@@ // === goToType === -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -133,12 +133,12 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + // === /a.ts === // --- (line: 5) skipped --- - // -@@= skipped -45, +19 lines =@@ +@@= skipped -36, +22 lines =@@ // // async a() { } // @@ -161,14 +161,14 @@ // === goToType === -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -184,24 +184,24 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + // === /a.ts === // --- (line: 9) skipped --- - // -@@= skipped -39, +13 lines =@@ +@@= skipped -30, +16 lines =@@ // === goToType === -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -217,24 +217,24 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + // === /a.ts === // --- (line: 9) skipped --- - // -@@= skipped -39, +13 lines =@@ +@@= skipped -30, +16 lines =@@ // === goToType === -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -250,24 +250,24 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + // === /a.ts === // --- (line: 9) skipped --- - // -@@= skipped -39, +13 lines =@@ +@@= skipped -30, +16 lines =@@ // === goToType === -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -283,12 +283,12 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + // === /a.ts === // --- (line: 9) skipped --- - // -@@= skipped -44, +18 lines =@@ +@@= skipped -35, +21 lines =@@ // public async c() { } // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc index e15dcddec0..f594dd4fbf 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc @@ -8,9 +8,37 @@ // declare const user2: PickedUser // user2 +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * From T, pick a set of properties whose keys are in the union K +// */ +// type Pick = [|{ +// [P in K]: T[P]; +// }|]; +// +// /** +// * Construct a type with a set of properties K of type T +// --- (line: --) skipped --- +// + // === goToType === +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * From T, pick a set of properties whose keys are in the union K +// */ +// type Pick = [|{ +// [P in K]: T[P]; +// }|]; +// +// /** +// * Construct a type with a set of properties K of type T +// --- (line: --) skipped --- +// + // === /goToTypeDefinition_Pick.ts === // --- (line: 3) skipped --- // diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff index 5e930bbda2..7d31242b28 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_Pick.baseline.jsonc.diff @@ -5,21 +5,33 @@ // user2 -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * From T, pick a set of properties whose keys are in the union K --// */ --// type Pick = [|{ --// [P in K]: T[P]; --// }|]; --// --// /** --// * Construct a type with a set of properties K of type T --// --- (line: --) skipped --- -- ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * From T, pick a set of properties whose keys are in the union K +@@= skipped -12, +12 lines =@@ + // /** + // * Construct a type with a set of properties K of type T + // --- (line: --) skipped --- ++// + // === goToType === ++// === lib.es5.d.ts === ++// --- (line: --) skipped --- ++// /** ++// * From T, pick a set of properties whose keys are in the union K ++// */ ++// type Pick = [|{ ++// [P in K]: T[P]; ++// }|]; ++// ++// /** ++// * Construct a type with a set of properties K of type T ++// --- (line: --) skipped --- ++// ++ // === /goToTypeDefinition_Pick.ts === -// type User = [|{ id: number; name: string; }|]; -// declare const user: Pick diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc index e7dc0a98b2..1b4578e9f7 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc @@ -8,6 +8,29 @@ // declare const users2: UsersArr // --- (line: 7) skipped --- +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// slice(start?: number, end?: number): T[]; +// } +// +// interface [|Array|] { +// /** +// * Gets or sets the length of the array. This is a number one higher than the highest index in the array. +// */ +// --- (line: --) skipped --- +// + +// --- (line: --) skipped --- +// readonly prototype: any[]; +// } +// +// declare var [|Array|]: ArrayConstructor; +// +// interface TypedPropertyDescriptor { +// enumerable?: boolean; +// --- (line: --) skipped --- +// + // === goToType === @@ -24,6 +47,29 @@ // declare const users3: CustomArray // users3 +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// slice(start?: number, end?: number): T[]; +// } +// +// interface [|Array|] { +// /** +// * Gets or sets the length of the array. This is a number one higher than the highest index in the array. +// */ +// --- (line: --) skipped --- +// + +// --- (line: --) skipped --- +// readonly prototype: any[]; +// } +// +// declare var [|Array|]: ArrayConstructor; +// +// interface TypedPropertyDescriptor { +// enumerable?: boolean; +// --- (line: --) skipped --- +// + // === goToType === diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff index 2563acc15d..d3a0953c00 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff @@ -5,14 +5,14 @@ // --- (line: 7) skipped --- -// === lib.d.ts === --// --- (line: --) skipped --- --// slice(start?: number, end?: number): T[]; --// } --// --// interface [|Array|] { --// /** --// * Gets or sets the length of the array. This is a number one higher than the highest index in the array. --// */ ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // slice(start?: number, end?: number): T[]; + // } +@@= skipped -9, +9 lines =@@ + // /** + // * Gets or sets the length of the array. This is a number one higher than the highest index in the array. + // */ -// length: number; -// /** -// * Returns a string representation of an array. @@ -199,35 +199,32 @@ -// -// interface ArrayConstructor { -// new (arrayLength?: number): any[]; --// --- (line: --) skipped --- -- --// --- (line: --) skipped --- --// readonly prototype: any[]; --// } --// --// declare var [|Array|]: ArrayConstructor; --// --// interface TypedPropertyDescriptor { --// enumerable?: boolean; --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + + // --- (line: --) skipped --- + // readonly prototype: any[]; +@@= skipped -197, +12 lines =@@ + // interface TypedPropertyDescriptor { + // enumerable?: boolean; + // --- (line: --) skipped --- ++// + - // === goToType === -@@= skipped -222, +15 lines =@@ - // class CustomArray extends Array { immutableReverse() { return [...this].reverse() } } +@@= skipped -17, +18 lines =@@ // declare const users3: CustomArray // users3 -- + -// === lib.d.ts === --// --- (line: --) skipped --- --// slice(start?: number, end?: number): T[]; --// } --// --// interface [|Array|] { --// /** --// * Gets or sets the length of the array. This is a number one higher than the highest index in the array. --// */ ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // slice(start?: number, end?: number): T[]; + // } +@@= skipped -9, +9 lines =@@ + // /** + // * Gets or sets the length of the array. This is a number one higher than the highest index in the array. + // */ -// length: number; -// /** -// * Returns a string representation of an array. @@ -414,16 +411,15 @@ -// -// interface ArrayConstructor { -// new (arrayLength?: number): any[]; --// --- (line: --) skipped --- -- --// --- (line: --) skipped --- --// readonly prototype: any[]; --// } --// --// declare var [|Array|]: ArrayConstructor; --// --// interface TypedPropertyDescriptor { --// enumerable?: boolean; --// --- (line: --) skipped --- + // --- (line: --) skipped --- ++// + + // --- (line: --) skipped --- + // readonly prototype: any[]; +@@= skipped -197, +12 lines =@@ + // interface TypedPropertyDescriptor { + // enumerable?: boolean; + // --- (line: --) skipped --- ++// diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc index 18eae436c2..3d03737d36 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc @@ -7,6 +7,18 @@ // // export {} +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// + // === goToType === @@ -16,4 +28,16 @@ // // const /*GOTO TYPE*/promisedBob = getUser() // -// export {} \ No newline at end of file +// export {} + +// === bundled:///libs/lib.es5.d.ts === +// --- (line: --) skipped --- +// /** +// * Represents the completion of an asynchronous operation +// */ +// interface [|Promise|] { +// /** +// * Attaches callbacks for the resolution and/or rejection of the Promise. +// * @param onfulfilled The callback to execute when the Promise is resolved. +// --- (line: --) skipped --- +// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff index d9a5048cfc..85e1db9a52 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff @@ -5,14 +5,14 @@ // export {} -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -28,25 +28,24 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- -- + // --- (line: --) skipped --- ++// + - // === goToType === -@@= skipped -36, +10 lines =@@ - // const /*GOTO TYPE*/promisedBob = getUser() +@@= skipped -28, +14 lines =@@ // // export {} -- + -// === lib.d.ts === --// --- (line: --) skipped --- --// /** --// * Represents the completion of an asynchronous operation --// */ --// interface [|Promise|] { --// /** --// * Attaches callbacks for the resolution and/or rejection of the Promise. --// * @param onfulfilled The callback to execute when the Promise is resolved. ++// === lib.es5.d.ts === + // --- (line: --) skipped --- + // /** + // * Represents the completion of an asynchronous operation +@@= skipped -9, +9 lines =@@ + // /** + // * Attaches callbacks for the resolution and/or rejection of the Promise. + // * @param onfulfilled The callback to execute when the Promise is resolved. -// * @param onrejected The callback to execute when the Promise is rejected. -// * @returns A Promise for the completion of which ever callback is executed. -// */ @@ -62,4 +61,5 @@ -// -// /** -// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. --// --- (line: --) skipped --- \ No newline at end of file + // --- (line: --) skipped --- ++// \ No newline at end of file From d2337e5f35ed07dd3053364e0841a798a94797f1 Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Tue, 18 Nov 2025 14:45:17 -0800 Subject: [PATCH 09/12] add back contextSpan --- internal/fourslash/baselineutil.go | 104 +++++++++++++++++++++-------- internal/fourslash/fourslash.go | 34 ++++++---- 2 files changed, 96 insertions(+), 42 deletions(-) diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 08dc1def60..2c18eab83c 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -263,7 +263,7 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio oldGoToDefCommand, string(goToDefinitionCmd), oldGoToDefComment, "/*GOTO DEF*/", ) - var objectRangeRegex = regexp.MustCompile(`{\| [^|]* \|}`) + objectRangeRegex := regexp.MustCompile(`{\| [^|]* \|}`) detailsStr := "// === Details ===" lines := strings.Split(s, "\n") var isInCommand bool @@ -319,6 +319,12 @@ func normalizeCommandName(command string) string { return stringutil.LowerFirstChar(command) } +type documentSpan struct { + uri lsproto.DocumentUri + textSpan lsproto.Range + contextSpan *lsproto.Range +} + type baselineFourslashLocationsOptions struct { // markerInfo marker MarkerOrRange // location @@ -326,27 +332,33 @@ type baselineFourslashLocationsOptions struct { endMarker string - startMarkerPrefix func(span lsproto.Location) *string - endMarkerSuffix func(span lsproto.Location) *string + startMarkerPrefix func(span documentSpan) *string + endMarkerSuffix func(span documentSpan) *string - additionalLocation *lsproto.Location + additionalSpan *documentSpan } -func (f *FourslashTest) getBaselineForLocationsWithFileContents(spans []lsproto.Location, options baselineFourslashLocationsOptions) string { - locationsByFile := collections.GroupBy(spans, func(span lsproto.Location) lsproto.DocumentUri { return span.Uri }) - rangesByFile := collections.MultiMap[lsproto.DocumentUri, lsproto.Range]{} - for file, locs := range locationsByFile.M { - for _, loc := range locs { - rangesByFile.Add(file, loc.Range) - } - } - return f.getBaselineForGroupedLocationsWithFileContents( - &rangesByFile, +func (f *FourslashTest) getBaselineForLocationsWithFileContents(locations []lsproto.Location, options baselineFourslashLocationsOptions) string { + return f.getBaselineForSpansWithFileContents( + core.Map(locations, func(loc lsproto.Location) documentSpan { + return documentSpan{ + uri: loc.Uri, + textSpan: loc.Range, + } + }), + options, + ) +} + +func (f *FourslashTest) getBaselineForSpansWithFileContents(spans []documentSpan, options baselineFourslashLocationsOptions) string { + spansByFile := collections.GroupBy(spans, func(span documentSpan) lsproto.DocumentUri { return span.uri }) + return f.getBaselineForGroupedSpansWithFileContents( + spansByFile, options, ) } -func (f *FourslashTest) getBaselineForGroupedLocationsWithFileContents(groupedRanges *collections.MultiMap[lsproto.DocumentUri, lsproto.Range], options baselineFourslashLocationsOptions) string { +func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges *collections.MultiMap[lsproto.DocumentUri, documentSpan], options baselineFourslashLocationsOptions) string { // We must always print the file containing the marker, // but don't want to print it twice at the end if it already // found in a file with ranges. @@ -379,7 +391,7 @@ func (f *FourslashTest) getBaselineForGroupedLocationsWithFileContents(groupedRa foundMarker = true } - if options.additionalLocation != nil && options.additionalLocation.Uri == fileName { + if options.additionalSpan != nil && options.additionalSpan.uri == fileName { foundAdditionalLocation = true } @@ -399,12 +411,12 @@ func (f *FourslashTest) getBaselineForGroupedLocationsWithFileContents(groupedRa // In Strada, there is a bug where we only ever add additional spans to baselines if we haven't // already added the file to the baseline. - if options.additionalLocation != nil && !foundAdditionalLocation { - fileName := options.additionalLocation.Uri.FileName() + if options.additionalSpan != nil && !foundAdditionalLocation { + fileName := options.additionalSpan.uri.FileName() if content, ok := f.vfs.ReadFile(fileName); ok { baselineEntries = append( baselineEntries, - f.getBaselineContentForFile(fileName, content, []lsproto.Range{options.additionalLocation.Range}, nil, options), + f.getBaselineContentForFile(fileName, content, []documentSpan{*options.additionalSpan}, nil, options), ) if options.marker != nil && options.marker.FileName() == fileName { foundMarker = true @@ -428,45 +440,72 @@ func (f *FourslashTest) getBaselineForGroupedLocationsWithFileContents(groupedRa type baselineDetail struct { pos lsproto.Position positionMarker string - span *lsproto.Range + span *documentSpan kind string } func (f *FourslashTest) getBaselineContentForFile( fileName string, content string, - spansInFile []lsproto.Range, - spanToContextId map[lsproto.Range]int, + spansInFile []documentSpan, + spanToContextId map[documentSpan]int, options baselineFourslashLocationsOptions, ) string { details := []*baselineDetail{} detailPrefixes := map[*baselineDetail]string{} detailSuffixes := map[*baselineDetail]string{} canDetermineContextIdInline := true - uri := lsconv.FileNameToDocumentURI(fileName) if options.marker != nil && options.marker.FileName() == fileName { details = append(details, &baselineDetail{pos: options.marker.LSPos(), positionMarker: options.markerName}) } for _, span := range spansInFile { + contextSpanIndex := len(details) + + // Add context span markers if present + if span.contextSpan != nil { + details = append(details, &baselineDetail{ + pos: span.contextSpan.Start, + positionMarker: "<|", + span: &span, + kind: "contextStart", + }) + + // Check if context span starts after text span + if lsproto.ComparePositions(span.contextSpan.Start, span.textSpan.Start) > 0 { + canDetermineContextIdInline = false + } + } + textSpanIndex := len(details) details = append(details, - &baselineDetail{pos: span.Start, positionMarker: "[|", span: &span, kind: "textStart"}, - &baselineDetail{pos: span.End, positionMarker: core.OrElse(options.endMarker, "|]"), span: &span, kind: "textEnd"}, + &baselineDetail{pos: span.textSpan.Start, positionMarker: "[|", span: &span, kind: "textStart"}, + &baselineDetail{pos: span.textSpan.End, positionMarker: core.OrElse(options.endMarker, "|]"), span: &span, kind: "textEnd"}, ) + if span.contextSpan != nil { + details = append(details, &baselineDetail{ + pos: span.contextSpan.End, + positionMarker: "|>", + span: &span, + kind: "contextEnd", + }) + } + if options.startMarkerPrefix != nil { - startPrefix := options.startMarkerPrefix(lsproto.Location{Uri: uri, Range: span}) + startPrefix := options.startMarkerPrefix(span) if startPrefix != nil { // Special case: if this span starts at the same position as the provided marker, // we want the span's prefix to appear before the marker name. // i.e. We want `/*START PREFIX*/A: /*RENAME*/[|ARENAME|]`, // not `/*RENAME*//*START PREFIX*/A: [|ARENAME|]` - if options.marker != nil && fileName == options.marker.FileName() && span.Start == options.marker.LSPos() { + if options.marker != nil && fileName == options.marker.FileName() && span.textSpan.Start == options.marker.LSPos() { _, ok := detailPrefixes[details[0]] debug.Assert(!ok, "Expected only single prefix at marker location") detailPrefixes[details[0]] = *startPrefix + } else if span.contextSpan != nil && span.contextSpan.Start == span.textSpan.Start { + detailPrefixes[details[contextSpanIndex]] = *startPrefix } else { detailPrefixes[details[textSpanIndex]] = *startPrefix } @@ -474,9 +513,16 @@ func (f *FourslashTest) getBaselineContentForFile( } if options.endMarkerSuffix != nil { - endSuffix := options.endMarkerSuffix(lsproto.Location{Uri: uri, Range: span}) + endSuffix := options.endMarkerSuffix(span) if endSuffix != nil { - detailSuffixes[details[textSpanIndex+1]] = *endSuffix + // Same as above for suffixes: + if options.marker != nil && fileName == options.marker.FileName() && span.textSpan.End == options.marker.LSPos() { + detailSuffixes[details[0]] = *endSuffix + } else if span.contextSpan != nil && span.contextSpan.End == span.textSpan.End { + detailSuffixes[details[textSpanIndex+2]] = *endSuffix + } else { + detailSuffixes[details[textSpanIndex+1]] = *endSuffix + } } } } diff --git a/internal/fourslash/fourslash.go b/internal/fourslash/fourslash.go index 77d124cfe5..b5754a81f6 100644 --- a/internal/fourslash/fourslash.go +++ b/internal/fourslash/fourslash.go @@ -1317,10 +1317,17 @@ func (f *FourslashTest) VerifyBaselineGoToDefinition( } } + var additionalSpan *documentSpan + if additionalLocation != nil { + additionalSpan = &documentSpan{ + uri: additionalLocation.Uri, + textSpan: additionalLocation.Range, + } + } f.addResultToBaseline(t, goToDefinitionCmd, f.getBaselineForLocationsWithFileContents(resultAsLocations, baselineFourslashLocationsOptions{ - marker: markerOrRange, - markerName: "/*GOTO DEF*/", - additionalLocation: additionalLocation, + marker: markerOrRange, + markerName: "/*GOTO DEF*/", + additionalSpan: additionalSpan, })) } } @@ -2297,12 +2304,13 @@ func (f *FourslashTest) verifyBaselineRename( if result.WorkspaceEdit != nil && result.WorkspaceEdit.Changes != nil { changes = *result.WorkspaceEdit.Changes } - locationToText := map[lsproto.Location]string{} - fileToRange := collections.MultiMap[lsproto.DocumentUri, lsproto.Range]{} + spanToText := map[documentSpan]string{} + fileToSpan := collections.MultiMap[lsproto.DocumentUri, documentSpan]{} for uri, edits := range changes { for _, edit := range edits { - fileToRange.Add(uri, edit.Range) - locationToText[lsproto.Location{Uri: uri, Range: edit.Range}] = edit.NewText + span := documentSpan{uri: uri, textSpan: edit.Range} + fileToSpan.Add(uri, span) + spanToText[span] = edit.NewText } } @@ -2316,22 +2324,22 @@ func (f *FourslashTest) verifyBaselineRename( } } - baselineFileContent := f.getBaselineForGroupedLocationsWithFileContents( - &fileToRange, + baselineFileContent := f.getBaselineForGroupedSpansWithFileContents( + &fileToSpan, baselineFourslashLocationsOptions{ marker: markerOrRange, markerName: "/*RENAME*/", endMarker: "RENAME|]", - startMarkerPrefix: func(span lsproto.Location) *string { - text := locationToText[span] + startMarkerPrefix: func(span documentSpan) *string { + text := spanToText[span] prefixAndSuffix := strings.Split(text, "?") if prefixAndSuffix[0] != "" { return ptrTo("/*START PREFIX*/" + prefixAndSuffix[0]) } return nil }, - endMarkerSuffix: func(span lsproto.Location) *string { - text := locationToText[span] + endMarkerSuffix: func(span documentSpan) *string { + text := spanToText[span] prefixAndSuffix := strings.Split(text, "?") if prefixAndSuffix[1] != "" { return ptrTo(prefixAndSuffix[1] + "/*END SUFFIX*/") From 9a956c1525105722c3c2ab7ab03d916907f0c234 Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Wed, 19 Nov 2025 12:19:14 -0800 Subject: [PATCH 10/12] re-add context span and fixes --- .../fourslash/_scripts/convertFourslash.mts | 7 +- internal/fourslash/baselineutil.go | 27 +- internal/fourslash/fourslash.go | 271 +- ...ortCrossProject_paths_sharedOutDir_test.go | 1 + ...oImportCrossProject_paths_stripSrc_test.go | 1 + ...utoImportCrossProject_paths_toDist_test.go | 1 + ...autoImportCrossProject_paths_toSrc_test.go | 1 + ...portCrossProject_symlinks_stripSrc_test.go | 1 + ...ImportCrossProject_symlinks_toDist_test.go | 1 + ...oImportCrossProject_symlinks_toSrc_test.go | 1 + ...rtPackageJsonFilterExistingImport2_test.go | 1 + ...rtPackageJsonFilterExistingImport3_test.go | 1 + .../tests/gen/autoImportProvider4_test.go | 1 + .../tests/gen/autoImportProvider5_test.go | 1 + .../tests/gen/autoImportProvider6_test.go | 1 + .../gen/autoImportProvider_exportMap1_test.go | 1 + .../gen/autoImportProvider_exportMap2_test.go | 1 + .../gen/autoImportProvider_exportMap3_test.go | 1 + .../gen/autoImportProvider_exportMap4_test.go | 1 + .../gen/autoImportProvider_exportMap5_test.go | 1 + .../gen/autoImportProvider_exportMap6_test.go | 1 + .../gen/autoImportProvider_exportMap7_test.go | 1 + .../gen/autoImportProvider_exportMap8_test.go | 1 + .../gen/autoImportProvider_exportMap9_test.go | 1 + ...oImportProvider_globalTypingsCache_test.go | 1 + ...vider_namespaceSameNameAsIntrinsic_test.go | 1 + .../tests/gen/autoImportProvider_pnpm_test.go | 1 + ...autoImportProvider_referencesCrash_test.go | 1 + ...utoImportProvider_wildcardExports1_test.go | 1 + ...utoImportProvider_wildcardExports2_test.go | 1 + ...utoImportProvider_wildcardExports3_test.go | 1 + ...utoImportReExportFromAmbientModule_test.go | 1 + .../fourslash/tests/gen/completions01_test.go | 1 + .../fourslash/tests/gen/completions03_test.go | 1 + ...mpletionsImport_computedSymbolName_test.go | 1 + .../completionsImport_mergedReExport_test.go | 1 + ...ionsImport_sortingModuleSpecifiers_test.go | 1 + .../gen/declarationMapGoToDefinition_test.go | 1 + ...psGoToDefinitionRelativeSourceRoot_test.go | 1 + ...finitionSameNameDifferentDirectory_test.go | 1 + .../declarationMapsOutOfDateMapping_test.go | 1 + .../fourslash/tests/gen/definition01_test.go | 1 + .../tests/gen/documentHighlights01_test.go | 1 + ...htsTypeParameterInHeritageClause01_test.go | 1 + ...etJavaScriptSyntacticDiagnostics01_test.go | 1 + ...etJavaScriptSyntacticDiagnostics02_test.go | 1 + .../goToDefinitionScriptImportServer_test.go | 1 + ...oToImplementation_inDifferentFiles_test.go | 1 + .../tests/gen/implementation01_test.go | 1 + .../gen/importCompletions_importsMap1_test.go | 1 + .../gen/importCompletions_importsMap2_test.go | 1 + .../gen/importCompletions_importsMap3_test.go | 1 + .../gen/importCompletions_importsMap4_test.go | 1 + .../gen/importCompletions_importsMap5_test.go | 1 + .../tests/gen/importNameCodeFix_pnpm1_test.go | 1 + ...tatementCompletions_pnpmTransitive_test.go | 1 + ...rtSuggestionsCache_exportUndefined_test.go | 1 + ...uggestionsCache_invalidPackageJson_test.go | 1 + .../isDefinitionAcrossGlobalProjects_test.go | 1 + .../isDefinitionAcrossModuleProjects_test.go | 1 + .../gen/jsdocCallbackTagRename01_test.go | 1 + .../tests/gen/jsdocCallbackTag_test.go | 1 + .../gen/jsdocParamTagSpecialKeywords_test.go | 1 + .../tests/gen/jsdocTypedefTag1_test.go | 1 + .../tests/gen/jsdocTypedefTag2_test.go | 1 + .../gen/jsdocTypedefTagGoToDefinition_test.go | 1 + .../gen/jsdocTypedefTagNamespace_test.go | 1 + .../tests/gen/jsdocTypedefTagRename01_test.go | 1 + .../tests/gen/jsdocTypedefTagRename02_test.go | 1 + .../tests/gen/jsdocTypedefTagRename03_test.go | 1 + .../tests/gen/jsdocTypedefTagRename04_test.go | 1 + .../tests/gen/jsdocTypedefTag_test.go | 1 + internal/fourslash/tests/gen/ngProxy1_test.go | 1 + internal/fourslash/tests/gen/ngProxy2_test.go | 1 + internal/fourslash/tests/gen/ngProxy3_test.go | 1 + .../fourslash/tests/gen/occurrences01_test.go | 1 + .../fourslash/tests/gen/occurrences02_test.go | 1 + .../packageJsonImportsFailedLookups_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard1_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard2_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard3_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard4_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard5_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard6_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard7_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard8_test.go | 1 + ...ckageJsonImportsSrcNoDistWildcard9_test.go | 1 + .../fourslash/tests/gen/quickinfo01_test.go | 1 + .../tests/gen/quickinfoWrongComment_test.go | 1 + .../tests/gen/referenceToEmptyObject_test.go | 1 + .../fourslash/tests/gen/references01_test.go | 1 + .../gen/referencesInConfiguredProject_test.go | 1 + ...cesInEmptyFileWithMultipleProjects_test.go | 1 + .../tests/gen/referencesInEmptyFile_test.go | 1 + ...ngLiteralValueWithMultipleProjects_test.go | 1 + ...ncesToNonPropertyNameStringLiteral_test.go | 1 + .../referencesToStringLiteralValue_test.go | 1 + internal/fourslash/tests/gen/rename01_test.go | 1 + .../gen/renameInConfiguredProject_test.go | 1 + .../tests/gen/renameNamedImport_test.go | 1 + .../tests/gen/renameNamespaceImport_test.go | 1 + ...ImportExtensionsProjectReferences1_test.go | 1 + ...ImportExtensionsProjectReferences2_test.go | 1 + ...ImportExtensionsProjectReferences3_test.go | 1 + .../gen/signatureHelpJSDocCallbackTag_test.go | 1 + .../gen/tsconfigComputedPropertyError_test.go | 1 + .../tests/gen/tsxIncrementalServer_test.go | 1 + .../tests/gen/typeReferenceOnServer_test.go | 1 + .../tests/gen/typedefinition01_test.go | 1 + internal/ls/findallreferences.go | 3 +- ...findAllRefsForDefaultExport.baseline.jsonc | 2 +- ...itionAcrossMultipleProjects.baseline.jsonc | 8 +- .../goToDefinitionAlias.baseline.jsonc | 8 +- .../goToDefinitionAmbiants.baseline.jsonc | 12 +- ...itionApparentTypeProperties.baseline.jsonc | 4 +- .../goToDefinitionAwait1.baseline.jsonc | 8 +- .../goToDefinitionAwait3.baseline.jsonc | 12 +- .../goToDefinitionAwait3.baseline.jsonc.diff | 12 - .../goToDefinitionAwait4.baseline.jsonc | 4 +- ...tionCSSPatternAmbientModule.baseline.jsonc | 4 +- ...SSPatternAmbientModule.baseline.jsonc.diff | 2 +- ...DefinitionClassConstructors.baseline.jsonc | 20 +- ...itionClassConstructors.baseline.jsonc.diff | 13 - ...itionClassStaticBlocks.baseline.jsonc.diff | 18 +- ...structorOfClassExpression01.baseline.jsonc | 38 +- ...torOfClassExpression01.baseline.jsonc.diff | 44 - ...lassIsPrecededByNamespace01.baseline.jsonc | 8 +- ...sPrecededByNamespace01.baseline.jsonc.diff | 9 +- ...initionConstructorOverloads.baseline.jsonc | 16 +- .../goToDefinitionDecorator.baseline.jsonc | 8 +- ...efinitionDecoratorOverloads.baseline.jsonc | 4 +- ...onDestructuredRequire1.baseline.jsonc.diff | 2 +- ...onDestructuredRequire2.baseline.jsonc.diff | 2 +- ...goToDefinitionDifferentFile.baseline.jsonc | 10 +- ...tionDifferentFileIndirectly.baseline.jsonc | 10 +- ...oToDefinitionDynamicImport2.baseline.jsonc | 2 +- ...oToDefinitionDynamicImport3.baseline.jsonc | 2 +- ...finitionDynamicImport3.baseline.jsonc.diff | 4 +- ...oToDefinitionDynamicImport4.baseline.jsonc | 2 +- ...finitionDynamicImport4.baseline.jsonc.diff | 4 +- ...goToDefinitionExpandoClass1.baseline.jsonc | 2 +- ...efinitionExpandoClass1.baseline.jsonc.diff | 11 + ...goToDefinitionExpandoClass2.baseline.jsonc | 4 +- ...efinitionExpandoClass2.baseline.jsonc.diff | 14 + ...initionExpandoElementAccess.baseline.jsonc | 4 +- ...onExpandoElementAccess.baseline.jsonc.diff | 10 + ...finitionExternalModuleName3.baseline.jsonc | 4 +- ...finitionExternalModuleName5.baseline.jsonc | 4 +- ...finitionExternalModuleName6.baseline.jsonc | 4 +- ...finitionExternalModuleName7.baseline.jsonc | 4 +- ...finitionExternalModuleName8.baseline.jsonc | 4 +- ...finitionExternalModuleName9.baseline.jsonc | 4 +- ...DefinitionFunctionOverloads.baseline.jsonc | 12 +- ...itionFunctionOverloads.baseline.jsonc.diff | 6 +- ...ionFunctionOverloadsInClass.baseline.jsonc | 12 +- ...nctionOverloadsInClass.baseline.jsonc.diff | 12 +- .../goToDefinitionFunctionType.baseline.jsonc | 6 +- ...finitionImplicitConstructor.baseline.jsonc | 4 +- ...goToDefinitionImportedNames.baseline.jsonc | 4 +- ...ToDefinitionImportedNames10.baseline.jsonc | 2 +- ...initionImportedNames10.baseline.jsonc.diff | 6 +- ...initionImportedNames11.baseline.jsonc.diff | 4 +- ...oToDefinitionImportedNames2.baseline.jsonc | 4 +- ...oToDefinitionImportedNames3.baseline.jsonc | 8 +- ...oToDefinitionImportedNames4.baseline.jsonc | 4 +- ...oToDefinitionImportedNames5.baseline.jsonc | 4 +- ...oToDefinitionImportedNames7.baseline.jsonc | 4 +- ...oToDefinitionImportedNames8.baseline.jsonc | 4 +- ...oToDefinitionImportedNames9.baseline.jsonc | 4 +- .../goToDefinitionImports.baseline.jsonc | 4 +- .../goToDefinitionImports.baseline.jsonc.diff | 2 +- ...finitionInMemberDeclaration.baseline.jsonc | 22 +- ...oToDefinitionInTypeArgument.baseline.jsonc | 4 +- .../goToDefinitionInstanceof1.baseline.jsonc | 4 +- .../goToDefinitionInstanceof2.baseline.jsonc | 2 +- ...tionInterfaceAfterImplement.baseline.jsonc | 4 +- ...ToDefinitionJsDocImportTag4.baseline.jsonc | 2 +- ...ToDefinitionJsDocImportTag5.baseline.jsonc | 2 +- ...initionJsModuleExports.baseline.jsonc.diff | 4 +- .../goToDefinitionJsxCall.baseline.jsonc | 2 +- .../goToDefinitionJsxCall.baseline.jsonc.diff | 2 +- .../goToDefinitionJsxNotSet.baseline.jsonc | 4 +- ...oToDefinitionJsxNotSet.baseline.jsonc.diff | 13 + .../goToDefinitionMember.baseline.jsonc | 2 +- .../goToDefinitionMetaProperty.baseline.jsonc | 4 +- ...ToDefinitionMethodOverloads.baseline.jsonc | 20 +- ...initionMethodOverloads.baseline.jsonc.diff | 12 +- .../goToDefinitionModifiers.baseline.jsonc | 54 +- ...oToDefinitionModifiers.baseline.jsonc.diff | 37 - ...finitionMultipleDefinitions.baseline.jsonc | 20 +- ...NewExpressionTargetNotClass.baseline.jsonc | 8 +- ...indingElementPropertyName01.baseline.jsonc | 2 +- ...tionObjectLiteralProperties.baseline.jsonc | 10 +- ...ionObjectLiteralProperties1.baseline.jsonc | 4 +- .../goToDefinitionObjectSpread.baseline.jsonc | 4 +- ...sInMultiplePropertyAccesses.baseline.jsonc | 2 +- ...DefinitionOverriddenMember1.baseline.jsonc | 2 +- ...tionOverriddenMember11.baseline.jsonc.diff | 2 +- ...efinitionOverriddenMember12.baseline.jsonc | 2 +- ...efinitionOverriddenMember13.baseline.jsonc | 2 +- ...efinitionOverriddenMember14.baseline.jsonc | 2 +- ...efinitionOverriddenMember15.baseline.jsonc | 2 +- ...efinitionOverriddenMember17.baseline.jsonc | 2 +- ...tionOverriddenMember17.baseline.jsonc.diff | 4 +- ...efinitionOverriddenMember18.baseline.jsonc | 2 +- ...tionOverriddenMember18.baseline.jsonc.diff | 4 +- ...efinitionOverriddenMember19.baseline.jsonc | 2 +- ...tionOverriddenMember19.baseline.jsonc.diff | 4 +- ...DefinitionOverriddenMember2.baseline.jsonc | 2 +- ...efinitionOverriddenMember20.baseline.jsonc | 2 +- ...tionOverriddenMember20.baseline.jsonc.diff | 4 +- ...efinitionOverriddenMember21.baseline.jsonc | 2 +- ...efinitionOverriddenMember22.baseline.jsonc | 2 +- ...efinitionOverriddenMember23.baseline.jsonc | 2 +- ...efinitionOverriddenMember24.baseline.jsonc | 2 +- ...efinitionOverriddenMember25.baseline.jsonc | 2 +- ...efinitionOverriddenMember26.baseline.jsonc | 2 +- ...DefinitionOverriddenMember3.baseline.jsonc | 2 +- ...DefinitionOverriddenMember4.baseline.jsonc | 2 +- ...DefinitionOverriddenMember5.baseline.jsonc | 2 +- ...DefinitionOverriddenMember6.baseline.jsonc | 2 +- ...DefinitionOverriddenMember7.baseline.jsonc | 2 +- ...DefinitionOverriddenMember8.baseline.jsonc | 2 +- ...itionOverriddenMember8.baseline.jsonc.diff | 2 +- ...DefinitionOverriddenMember9.baseline.jsonc | 2 +- ...nitionPartialImplementation.baseline.jsonc | 8 +- .../goToDefinitionPrivateName.baseline.jsonc | 8 +- ...efinitionPropertyAssignment.baseline.jsonc | 4 +- ...tionPropertyAssignment.baseline.jsonc.diff | 11 + .../goToDefinitionRest.baseline.jsonc | 2 +- .../goToDefinitionReturn1.baseline.jsonc | 4 +- .../goToDefinitionReturn3.baseline.jsonc | 4 +- .../goToDefinitionReturn5.baseline.jsonc | 4 +- .../goToDefinitionReturn7.baseline.jsonc | 4 +- .../goToDefinitionSameFile.baseline.jsonc | 10 +- ...initionSatisfiesExpression1.baseline.jsonc | 4 +- ...oToDefinitionShadowVariable.baseline.jsonc | 2 +- ...nShadowVariableInsideModule.baseline.jsonc | 2 +- ...finitionShorthandProperty01.baseline.jsonc | 6 +- ...ionShorthandProperty01.baseline.jsonc.diff | 4 +- ...finitionShorthandProperty03.baseline.jsonc | 8 +- ...ionShorthandProperty04.baseline.jsonc.diff | 2 +- ...finitionShorthandProperty05.baseline.jsonc | 2 +- ...ionShorthandProperty05.baseline.jsonc.diff | 4 +- ...finitionShorthandProperty06.baseline.jsonc | 2 +- ...itionSignatureAlias_require.baseline.jsonc | 4 +- ...SignatureAlias_require.baseline.jsonc.diff | 8 +- .../goToDefinitionSimple.baseline.jsonc | 4 +- .../goToDefinitionSimple.baseline.jsonc.diff | 4 +- ...oDefinitionSwitchCase1.baseline.jsonc.diff | 9 + ...oDefinitionSwitchCase2.baseline.jsonc.diff | 9 + ...oDefinitionSwitchCase3.baseline.jsonc.diff | 19 + ...oDefinitionSwitchCase4.baseline.jsonc.diff | 10 + ...tionTaggedTemplateOverloads.baseline.jsonc | 4 +- .../goToDefinitionThis.baseline.jsonc | 8 +- ...oToDefinitionTypeOnlyImport.baseline.jsonc | 2 +- ...goToDefinitionTypePredicate.baseline.jsonc | 4 +- .../goToDefinitionTypeofThis.baseline.jsonc | 8 +- ...efinitionUnionTypeProperty1.baseline.jsonc | 4 +- ...efinitionUnionTypeProperty2.baseline.jsonc | 4 +- ...efinitionUnionTypeProperty3.baseline.jsonc | 2 +- ...efinitionUnionTypeProperty4.baseline.jsonc | 6 +- ...nTypeProperty_discriminated.baseline.jsonc | 12 +- ...efinitionVariableAssignment.baseline.jsonc | 2 +- ...tionVariableAssignment.baseline.jsonc.diff | 4 +- ...finitionVariableAssignment1.baseline.jsonc | 2 +- ...ionVariableAssignment1.baseline.jsonc.diff | 4 +- ...finitionVariableAssignment2.baseline.jsonc | 2 +- ...ionVariableAssignment2.baseline.jsonc.diff | 4 +- ...finitionVariableAssignment3.baseline.jsonc | 2 +- ...ionVariableAssignment3.baseline.jsonc.diff | 4 +- .../goToDefinitionYield1.baseline.jsonc | 8 +- .../goToDefinitionYield2.baseline.jsonc | 4 +- .../goToDefinitionYield3.baseline.jsonc | 12 +- .../goToDefinitionYield3.baseline.jsonc.diff | 12 - .../goToDefinitionYield4.baseline.jsonc | 2 +- ..._filteringGenericMappedType.baseline.jsonc | 8 +- ...eringGenericMappedType.baseline.jsonc.diff | 13 - ...inition_filteringMappedType.baseline.jsonc | 2 +- .../goToDefinition_mappedType.baseline.jsonc | 2 +- .../goToDefinition_super.baseline.jsonc | 4 +- ...oToDefinition_untypedModule.baseline.jsonc | 2 +- .../goToModuleAliasDefinition.baseline.jsonc | 2 +- ...oModuleAliasDefinition.baseline.jsonc.diff | 4 +- .../goToTypeDefinition4.baseline.jsonc | 4 +- ...finitionConstructorFunction.baseline.jsonc | 4 +- ...tionInObjectBindingPattern1.baseline.jsonc | 2 +- ...nObjectBindingPattern1.baseline.jsonc.diff | 4 +- ...tionInObjectBindingPattern2.baseline.jsonc | 6 +- ...nObjectBindingPattern2.baseline.jsonc.diff | 10 +- .../gotoDefinitionLinkTag1.baseline.jsonc | 42 +- ...gotoDefinitionLinkTag1.baseline.jsonc.diff | 39 - ...gotoDefinitionLinkTag3.baseline.jsonc.diff | 5 +- ...gotoDefinitionLinkTag4.baseline.jsonc.diff | 4 +- ...essExpressionHeritageClause.baseline.jsonc | 4 +- .../gotoDefinitionSatisfiesTag.baseline.jsonc | 4 +- ...otoDefinitionThrowsTag.baseline.jsonc.diff | 2 +- ...mportTypeNodeGoToDefinition.baseline.jsonc | 18 +- .../javaScriptClass3.baseline.jsonc | 4 +- .../goToDefinition/jsDocSee1.baseline.jsonc | 26 +- .../jsDocSee1.baseline.jsonc.diff | 17 - .../goToDefinition/jsDocSee2.baseline.jsonc | 2 +- .../goToDefinition/jsDocSee3.baseline.jsonc | 2 +- .../jsDocSee3.baseline.jsonc.diff | 4 +- .../goToDefinition/jsDocSee4.baseline.jsonc | 8 +- .../jsxSpreadReference.baseline.jsonc | 2 +- ..._with_variable_entity_names.baseline.jsonc | 2 +- ..._variable_entity_names.baseline.jsonc.diff | 2 +- .../reallyLargeFile.baseline.jsonc | 583705 +++++++++++++- .../reallyLargeFile.baseline.jsonc.diff | 583709 --------------- .../tsxGoToDefinitionClasses.baseline.jsonc | 10 +- ...tsxGoToDefinitionIntrinsics.baseline.jsonc | 8 +- ...efinitionStatelessFunction1.baseline.jsonc | 12 +- ...efinitionStatelessFunction2.baseline.jsonc | 12 +- ...DefinitionUnionElementType1.baseline.jsonc | 6 +- ...DefinitionUnionElementType2.baseline.jsonc | 2 +- ...mplementationClassMethod_00.baseline.jsonc | 2 +- ...mplementationClassMethod_01.baseline.jsonc | 4 +- .../goToImplementationEnum_00.baseline.jsonc | 2 +- .../goToImplementationEnum_01.baseline.jsonc | 4 +- ...mentationInterfaceMethod_00.baseline.jsonc | 20 +- ...mentationInterfaceMethod_01.baseline.jsonc | 4 +- ...mentationInterfaceMethod_02.baseline.jsonc | 4 +- ...mentationInterfaceMethod_03.baseline.jsonc | 2 +- ...mentationInterfaceMethod_04.baseline.jsonc | 4 +- ...mentationInterfaceMethod_05.baseline.jsonc | 6 +- ...tionInterfaceMethod_05.baseline.jsonc.diff | 4 +- ...mentationInterfaceMethod_06.baseline.jsonc | 10 +- ...tionInterfaceMethod_06.baseline.jsonc.diff | 4 +- ...mentationInterfaceMethod_08.baseline.jsonc | 4 +- ...mentationInterfaceMethod_09.baseline.jsonc | 12 +- ...tionInterfaceMethod_09.baseline.jsonc.diff | 8 +- ...mentationInterfaceMethod_10.baseline.jsonc | 12 +- ...mentationInterfaceMethod_11.baseline.jsonc | 4 +- ...ntationInterfaceProperty_00.baseline.jsonc | 8 +- ...ntationInterfaceProperty_01.baseline.jsonc | 2 +- ...oImplementationInterface_00.baseline.jsonc | 2 +- ...ementationInterface_00.baseline.jsonc.diff | 2 +- ...oImplementationInterface_01.baseline.jsonc | 20 +- ...ementationInterface_01.baseline.jsonc.diff | 10 - ...oImplementationInterface_07.baseline.jsonc | 2 +- ...ementationInterface_07.baseline.jsonc.diff | 2 +- ...oImplementationInterface_08.baseline.jsonc | 2 +- ...oImplementationInterface_10.baseline.jsonc | 10 +- .../goToImplementationLocal_00.baseline.jsonc | 2 +- .../goToImplementationLocal_01.baseline.jsonc | 2 +- .../goToImplementationLocal_02.baseline.jsonc | 2 +- .../goToImplementationLocal_03.baseline.jsonc | 2 +- .../goToImplementationLocal_04.baseline.jsonc | 2 +- .../goToImplementationLocal_05.baseline.jsonc | 2 +- .../goToImplementationLocal_06.baseline.jsonc | 2 +- .../goToImplementationLocal_07.baseline.jsonc | 2 +- .../goToImplementationLocal_08.baseline.jsonc | 2 +- ...oImplementationNamespace_00.baseline.jsonc | 8 +- ...oImplementationNamespace_01.baseline.jsonc | 2 +- ...oImplementationNamespace_02.baseline.jsonc | 2 +- ...oImplementationNamespace_03.baseline.jsonc | 8 +- ...ementationNamespace_03.baseline.jsonc.diff | 2 +- ...oImplementationNamespace_04.baseline.jsonc | 8 +- ...ementationNamespace_04.baseline.jsonc.diff | 2 +- ...oImplementationNamespace_05.baseline.jsonc | 8 +- ...ementationNamespace_05.baseline.jsonc.diff | 8 +- ...oImplementationNamespace_06.baseline.jsonc | 4 +- ...ementationNamespace_06.baseline.jsonc.diff | 2 +- ...rthandPropertyAssignment_00.baseline.jsonc | 20 +- ...dPropertyAssignment_00.baseline.jsonc.diff | 21 +- ...rthandPropertyAssignment_01.baseline.jsonc | 18 +- ...dPropertyAssignment_01.baseline.jsonc.diff | 28 - ...rthandPropertyAssignment_02.baseline.jsonc | 2 +- .../goToImplementationSuper_00.baseline.jsonc | 8 +- ...ImplementationSuper_00.baseline.jsonc.diff | 8 +- .../goToImplementationSuper_01.baseline.jsonc | 8 +- ...ImplementationSuper_01.baseline.jsonc.diff | 8 +- .../goToImplementationThis_00.baseline.jsonc | 4 +- .../goToImplementationThis_01.baseline.jsonc | 4 +- .../goToTypeDefinition.baseline.jsonc | 4 +- .../goToTypeDefinition2.baseline.jsonc | 8 +- .../goToTypeDefinition2.baseline.jsonc.diff | 13 - .../goToTypeDefinition3.baseline.jsonc | 2 +- .../goToTypeDefinitionAliases.baseline.jsonc | 8 +- ...oToTypeDefinitionImportMeta.baseline.jsonc | 16 +- ...peDefinitionImportMeta.baseline.jsonc.diff | 16 +- ...goToTypeDefinitionModifiers.baseline.jsonc | 154 +- ...ypeDefinitionModifiers.baseline.jsonc.diff | 226 +- .../goToTypeDefinitionModule.baseline.jsonc | 8 +- ...goToTypeDefinitionUnionType.baseline.jsonc | 12 +- ...oToTypeDefinition_arrayType.baseline.jsonc | 382 +- ...peDefinition_arrayType.baseline.jsonc.diff | 390 +- ...oTypeDefinition_promiseType.baseline.jsonc | 34 +- ...Definition_promiseType.baseline.jsonc.diff | 46 +- ...ToTypeDefinition_returnType.baseline.jsonc | 20 +- ...eDefinition_returnType.baseline.jsonc.diff | 8 +- 392 files changed, 585443 insertions(+), 585462 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff create mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff diff --git a/internal/fourslash/_scripts/convertFourslash.mts b/internal/fourslash/_scripts/convertFourslash.mts index 488c1abcd5..3030976773 100644 --- a/internal/fourslash/_scripts/convertFourslash.mts +++ b/internal/fourslash/_scripts/convertFourslash.mts @@ -65,8 +65,9 @@ function parseTypeScriptFiles(failingTests: Set, manualTests: Set, test: GoTest): string { +function generateGoTest(failingTests: Set, test: GoTest, isServer: boolean): string { const testName = (test.name[0].toUpperCase() + test.name.substring(1)).replaceAll("-", "_").replaceAll(/[^a-zA-Z0-9_]/g, ""); const content = test.content; const commands = test.commands.map(cmd => generateCmd(cmd)).join("\n"); @@ -2129,7 +2130,7 @@ func Test${testName}(t *testing.T) { defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = ${content} f := fourslash.NewFourslash(t, nil /*capabilities*/, content) - ${commands} + ${isServer ? `f.MarkTestAsStradaServer()\n` : ""}${commands} }`; return template; } diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index 2c18eab83c..bd0ba13e43 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -73,7 +73,7 @@ func getBaselineExtension(command baselineCommand) string { } } -func getBaselineOptions(command baselineCommand, testPath string) baseline.Options { +func (f *FourslashTest) getBaselineOptions(command baselineCommand, testPath string) baseline.Options { subfolder := "fourslash/" + normalizeCommandName(string(command)) if !isSubmoduleTest(testPath) { return baseline.Options{ @@ -251,13 +251,9 @@ func getBaselineOptions(command baselineCommand, testPath string) baseline.Optio commandPrefix := regexp.MustCompile(`^// === ([a-z\sA-Z]*) ===`) testFilePrefix := "/tests/cases/fourslash" serverTestFilePrefix := "/server" - contextSpanOpening := "<|" - contextSpanClosing := "|>" oldGoToDefCommand := "getDefinitionAtPosition" oldGoToDefComment := "/*GOTO DEF POS*/" replacer := strings.NewReplacer( - contextSpanOpening, "", - contextSpanClosing, "", testFilePrefix, "", serverTestFilePrefix, "", oldGoToDefCommand, string(goToDefinitionCmd), @@ -338,14 +334,16 @@ type baselineFourslashLocationsOptions struct { additionalSpan *documentSpan } +func locationToSpan(loc lsproto.Location) documentSpan { + return documentSpan{ + uri: loc.Uri, + textSpan: loc.Range, + } +} + func (f *FourslashTest) getBaselineForLocationsWithFileContents(locations []lsproto.Location, options baselineFourslashLocationsOptions) string { return f.getBaselineForSpansWithFileContents( - core.Map(locations, func(loc lsproto.Location) documentSpan { - return documentSpan{ - uri: loc.Uri, - textSpan: loc.Range, - } - }), + core.Map(locations, locationToSpan), options, ) } @@ -364,6 +362,7 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges // found in a file with ranges. foundMarker := false foundAdditionalLocation := false + spanToContextId := map[documentSpan]int{} baselineEntries := []string{} walkDirFn := func(path string, d vfs.DirEntry, e error) error { @@ -395,7 +394,7 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges foundAdditionalLocation = true } - baselineEntries = append(baselineEntries, f.getBaselineContentForFile(path, content, ranges, nil, options)) + baselineEntries = append(baselineEntries, f.getBaselineContentForFile(path, content, ranges, spanToContextId, options)) return nil } @@ -416,7 +415,7 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges if content, ok := f.vfs.ReadFile(fileName); ok { baselineEntries = append( baselineEntries, - f.getBaselineContentForFile(fileName, content, []documentSpan{*options.additionalSpan}, nil, options), + f.getBaselineContentForFile(fileName, content, []documentSpan{*options.additionalSpan}, spanToContextId, options), ) if options.marker != nil && options.marker.FileName() == fileName { foundMarker = true @@ -428,7 +427,7 @@ func (f *FourslashTest) getBaselineForGroupedSpansWithFileContents(groupedRanges // If we didn't find the marker in any file, we need to add it. markerFileName := options.marker.FileName() if content, ok := f.vfs.ReadFile(markerFileName); ok { - baselineEntries = append(baselineEntries, f.getBaselineContentForFile(markerFileName, content, nil, nil, options)) + baselineEntries = append(baselineEntries, f.getBaselineContentForFile(markerFileName, content, nil, spanToContextId, options)) } } diff --git a/internal/fourslash/fourslash.go b/internal/fourslash/fourslash.go index b5754a81f6..f8aaadd3f7 100644 --- a/internal/fourslash/fourslash.go +++ b/internal/fourslash/fourslash.go @@ -54,6 +54,8 @@ type FourslashTest struct { lastKnownMarkerName *string activeFilename string selectionEnd *lsproto.Position + + isStradaServer bool // Whether this is a fourslash server test in Strada. !!! Remove once we don't need to diff baselines. } type scriptInfo struct { @@ -280,6 +282,9 @@ var ( defaultTypeDefinitionCapabilities = &lsproto.TypeDefinitionClientCapabilities{ LinkSupport: ptrTrue, } + defaultImplementationCapabilities = &lsproto.ImplementationClientCapabilities{ + LinkSupport: ptrTrue, + } defaultHoverCapabilities = &lsproto.HoverClientCapabilities{ ContentFormat: &[]lsproto.MarkupKind{lsproto.MarkupKindMarkdown, lsproto.MarkupKindPlainText}, } @@ -333,6 +338,9 @@ func getCapabilitiesWithDefaults(capabilities *lsproto.ClientCapabilities) *lspr if capabilitiesWithDefaults.TextDocument.TypeDefinition == nil { capabilitiesWithDefaults.TextDocument.TypeDefinition = defaultTypeDefinitionCapabilities } + if capabilitiesWithDefaults.TextDocument.Implementation == nil { + capabilitiesWithDefaults.TextDocument.Implementation = defaultImplementationCapabilities + } if capabilitiesWithDefaults.TextDocument.Hover == nil { capabilitiesWithDefaults.TextDocument.Hover = defaultHoverCapabilities } @@ -1257,10 +1265,56 @@ func (f *FourslashTest) VerifyBaselineFindAllReferences( } } +func (f *FourslashTest) MarkTestAsStradaServer() { + f.isStradaServer = true +} + func (f *FourslashTest) VerifyBaselineGoToDefinition( t *testing.T, includeOriginalSelectionRange bool, markers ...string, +) { + f.verifyBaselineDefinitions( + t, + goToDefinitionCmd, + "/*GOTO DEF*/", /*definitionMarker*/ + func(t *testing.T, f *FourslashTest, fileName string, position lsproto.Position) lsproto.LocationOrLocationsOrDefinitionLinksOrNull { + params := &lsproto.DefinitionParams{ + TextDocument: lsproto.TextDocumentIdentifier{ + Uri: lsconv.FileNameToDocumentURI(f.activeFilename), + }, + Position: f.currentCaretPosition, + } + + resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentDefinitionInfo, params) + if resMsg == nil { + if f.lastKnownMarkerName == nil { + t.Fatalf("Nil response received for definition request at pos %v", f.currentCaretPosition) + } else { + t.Fatalf("Nil response received for definition request at marker '%s'", *f.lastKnownMarkerName) + } + } + if !resultOk { + if f.lastKnownMarkerName == nil { + t.Fatalf("Unexpected definition response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) + } else { + t.Fatalf("Unexpected definition response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) + } + } + return result + }, + includeOriginalSelectionRange, + markers..., + ) +} + +func (f *FourslashTest) verifyBaselineDefinitions( + t *testing.T, + definitionCommand baselineCommand, + definitionMarker string, + getDefinitions func(t *testing.T, f *FourslashTest, fileName string, position lsproto.Position) lsproto.LocationOrLocationsOrDefinitionLinksOrNull, + includeOriginalSelectionRange bool, + markers ...string, ) { referenceLocations := f.lookupMarkersOrGetRanges(t, markers) @@ -1268,65 +1322,42 @@ func (f *FourslashTest) VerifyBaselineGoToDefinition( // worker in `baselineEachMarkerOrRange` f.GoToMarkerOrRange(t, markerOrRange) - params := &lsproto.DefinitionParams{ - TextDocument: lsproto.TextDocumentIdentifier{ - Uri: lsconv.FileNameToDocumentURI(f.activeFilename), - }, - Position: f.currentCaretPosition, - } + result := getDefinitions(t, f, f.activeFilename, f.currentCaretPosition) - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentDefinitionInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for definition request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for definition request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected definition response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected definition response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) - } - } - - var resultAsLocations []lsproto.Location - var additionalLocation *lsproto.Location + var resultAsSpans []documentSpan + var additionalSpan *documentSpan if result.Locations != nil { - resultAsLocations = *result.Locations + resultAsSpans = core.Map(*result.Locations, locationToSpan) } else if result.Location != nil { - resultAsLocations = []lsproto.Location{*result.Location} + resultAsSpans = []documentSpan{locationToSpan(*result.Location)} } else if result.DefinitionLinks != nil { var originRange *lsproto.Range - resultAsLocations = core.Map(*result.DefinitionLinks, func(link *lsproto.LocationLink) lsproto.Location { + resultAsSpans = core.Map(*result.DefinitionLinks, func(link *lsproto.LocationLink) documentSpan { if originRange != nil && originRange != link.OriginSelectionRange { panic("multiple different origin ranges in definition links") } originRange = link.OriginSelectionRange - return lsproto.Location{ - Uri: link.TargetUri, - Range: link.TargetSelectionRange, + var contextSpan *lsproto.Range + if link.TargetRange != link.TargetSelectionRange && !f.isStradaServer { + contextSpan = &link.TargetRange + } + return documentSpan{ + uri: link.TargetUri, + textSpan: link.TargetSelectionRange, + contextSpan: contextSpan, } }) if originRange != nil && includeOriginalSelectionRange { - additionalLocation = &lsproto.Location{ - Uri: lsconv.FileNameToDocumentURI(f.activeFilename), - Range: *originRange, + additionalSpan = &documentSpan{ + uri: lsconv.FileNameToDocumentURI(f.activeFilename), + textSpan: *originRange, } } } - var additionalSpan *documentSpan - if additionalLocation != nil { - additionalSpan = &documentSpan{ - uri: additionalLocation.Uri, - textSpan: additionalLocation.Range, - } - } - f.addResultToBaseline(t, goToDefinitionCmd, f.getBaselineForLocationsWithFileContents(resultAsLocations, baselineFourslashLocationsOptions{ + f.addResultToBaseline(t, definitionCommand, f.getBaselineForSpansWithFileContents(resultAsSpans, baselineFourslashLocationsOptions{ marker: markerOrRange, - markerName: "/*GOTO DEF*/", + markerName: definitionMarker, additionalSpan: additionalSpan, })) } @@ -1336,54 +1367,38 @@ func (f *FourslashTest) VerifyBaselineGoToTypeDefinition( t *testing.T, markers ...string, ) { - referenceLocations := f.lookupMarkersOrGetRanges(t, markers) - - for _, markerOrRange := range referenceLocations { - // worker in `baselineEachMarkerOrRange` - f.GoToMarkerOrRange(t, markerOrRange) - - params := &lsproto.TypeDefinitionParams{ - TextDocument: lsproto.TextDocumentIdentifier{ - Uri: lsconv.FileNameToDocumentURI(f.activeFilename), - }, - Position: f.currentCaretPosition, - } - - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentTypeDefinitionInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for type definition request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for type definition request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected type definition response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected type definition response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) + f.verifyBaselineDefinitions( + t, + goToTypeDefinitionCmd, + "/*GOTO TYPE*/", /*definitionMarker*/ + func(t *testing.T, f *FourslashTest, fileName string, position lsproto.Position) lsproto.LocationOrLocationsOrDefinitionLinksOrNull { + params := &lsproto.TypeDefinitionParams{ + TextDocument: lsproto.TextDocumentIdentifier{ + Uri: lsconv.FileNameToDocumentURI(f.activeFilename), + }, + Position: f.currentCaretPosition, } - } - var resultAsLocations []lsproto.Location - if result.Locations != nil { - resultAsLocations = *result.Locations - } else if result.Location != nil { - resultAsLocations = []lsproto.Location{*result.Location} - } else if result.DefinitionLinks != nil { - resultAsLocations = core.Map(*result.DefinitionLinks, func(link *lsproto.LocationLink) lsproto.Location { - return lsproto.Location{ - Uri: link.TargetUri, - Range: link.TargetSelectionRange, + resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentTypeDefinitionInfo, params) + if resMsg == nil { + if f.lastKnownMarkerName == nil { + t.Fatalf("Nil response received for type definition request at pos %v", f.currentCaretPosition) + } else { + t.Fatalf("Nil response received for type definition request at marker '%s'", *f.lastKnownMarkerName) } - }) - } - - f.addResultToBaseline(t, goToTypeDefinitionCmd, f.getBaselineForLocationsWithFileContents(resultAsLocations, baselineFourslashLocationsOptions{ - marker: markerOrRange, - markerName: "/*GOTO TYPE*/", - })) - } + } + if !resultOk { + if f.lastKnownMarkerName == nil { + t.Fatalf("Unexpected type definition response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) + } else { + t.Fatalf("Unexpected type definition response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) + } + } + return result + }, + false, /*includeOriginalSelectionRange*/ + markers..., + ) } func (f *FourslashTest) VerifyBaselineHover(t *testing.T) { @@ -2441,7 +2456,7 @@ func (f *FourslashTest) getRangeText(r *RangeMarker) string { func (f *FourslashTest) verifyBaselines(t *testing.T, testPath string) { for command, content := range f.baselines { - baseline.Run(t, getBaselineFileName(t, command), content.String(), getBaselineOptions(command, testPath)) + baseline.Run(t, getBaselineFileName(t, command), content.String(), f.getBaselineOptions(command, testPath)) } } @@ -2770,60 +2785,36 @@ func isLibFile(fileName string) bool { var AnyTextEdits *[]*lsproto.TextEdit func (f *FourslashTest) VerifyBaselineGoToImplementation(t *testing.T, markerNames ...string) { - markers := f.lookupMarkersOrGetRanges(t, markerNames) - - for _, markerOrRange := range markers { - f.GoToMarkerOrRange(t, markerOrRange) - - params := &lsproto.ImplementationParams{ - TextDocument: lsproto.TextDocumentIdentifier{ - Uri: lsconv.FileNameToDocumentURI(f.activeFilename), - }, - Position: f.currentCaretPosition, - } - - resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentImplementationInfo, params) - if resMsg == nil { - if f.lastKnownMarkerName == nil { - t.Fatalf("Nil response received for implementation request at pos %v", f.currentCaretPosition) - } else { - t.Fatalf("Nil response received for implementation request at marker '%s'", *f.lastKnownMarkerName) - } - } - if !resultOk { - if f.lastKnownMarkerName == nil { - t.Fatalf("Unexpected implementation response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) - } else { - t.Fatalf("Unexpected implementation response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) + f.verifyBaselineDefinitions( + t, + goToImplementationCmd, + "/*GOTO IMPL*/", /*definitionMarker*/ + func(t *testing.T, f *FourslashTest, fileName string, position lsproto.Position) lsproto.LocationOrLocationsOrDefinitionLinksOrNull { + params := &lsproto.ImplementationParams{ + TextDocument: lsproto.TextDocumentIdentifier{ + Uri: lsconv.FileNameToDocumentURI(f.activeFilename), + }, + Position: f.currentCaretPosition, } - } - // Strada did not allow for LocationLinks, so we convert them to Locations here. - // We also don't include the origin selection range in the baselines for the same reason. - var resultAsLocations []lsproto.Location - if result.Locations != nil { - resultAsLocations = *result.Locations - } else if result.Location != nil { - resultAsLocations = []lsproto.Location{*result.Location} - } else if result.DefinitionLinks != nil { - var originRange *lsproto.Range - resultAsLocations = core.Map(*result.DefinitionLinks, func(link *lsproto.LocationLink) lsproto.Location { - if originRange != nil && originRange != link.OriginSelectionRange { - panic("multiple different origin ranges in definition links") + resMsg, result, resultOk := sendRequest(t, f, lsproto.TextDocumentImplementationInfo, params) + if resMsg == nil { + if f.lastKnownMarkerName == nil { + t.Fatalf("Nil response received for implementation request at pos %v", f.currentCaretPosition) + } else { + t.Fatalf("Nil response received for implementation request at marker '%s'", *f.lastKnownMarkerName) } - originRange = link.OriginSelectionRange - return lsproto.Location{ - Uri: link.TargetUri, - Range: link.TargetSelectionRange, + } + if !resultOk { + if f.lastKnownMarkerName == nil { + t.Fatalf("Unexpected implementation response type at pos %v: %T", f.currentCaretPosition, resMsg.AsResponse().Result) + } else { + t.Fatalf("Unexpected implementation response type at marker '%s': %T", *f.lastKnownMarkerName, resMsg.AsResponse().Result) } - }) - } - f.addResultToBaseline(t, goToImplementationCmd, f.getBaselineForLocationsWithFileContents( - resultAsLocations, - baselineFourslashLocationsOptions{ - marker: markerOrRange, - markerName: "/*GOTO IMPL*/", - }, - )) - } + } + return result + }, + false, /*includeOriginalSelectionRange*/ + markerNames..., + ) } diff --git a/internal/fourslash/tests/gen/autoImportCrossProject_paths_sharedOutDir_test.go b/internal/fourslash/tests/gen/autoImportCrossProject_paths_sharedOutDir_test.go index 1c6c889718..93f837967e 100644 --- a/internal/fourslash/tests/gen/autoImportCrossProject_paths_sharedOutDir_test.go +++ b/internal/fourslash/tests/gen/autoImportCrossProject_paths_sharedOutDir_test.go @@ -41,6 +41,7 @@ import "./sub/folder"; // @Filename: /home/src/workspaces/project/packages/dep/sub/folder/index.ts export const dep = 0;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { dep } from "packages/dep/sub/folder"; diff --git a/internal/fourslash/tests/gen/autoImportCrossProject_paths_stripSrc_test.go b/internal/fourslash/tests/gen/autoImportCrossProject_paths_stripSrc_test.go index d55afda187..9e4984348a 100644 --- a/internal/fourslash/tests/gen/autoImportCrossProject_paths_stripSrc_test.go +++ b/internal/fourslash/tests/gen/autoImportCrossProject_paths_stripSrc_test.go @@ -45,6 +45,7 @@ export const dep1 = 0; // @Filename: /home/src/workspaces/project/packages/dep/src/sub/folder/index.ts export const dep2 = 0;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "1") f.VerifyImportFixAtPosition(t, []string{ `import { dep1 } from "dep"; diff --git a/internal/fourslash/tests/gen/autoImportCrossProject_paths_toDist_test.go b/internal/fourslash/tests/gen/autoImportCrossProject_paths_toDist_test.go index 41428f10d4..f635bb08ba 100644 --- a/internal/fourslash/tests/gen/autoImportCrossProject_paths_toDist_test.go +++ b/internal/fourslash/tests/gen/autoImportCrossProject_paths_toDist_test.go @@ -45,6 +45,7 @@ export const dep1 = 0; // @Filename: /home/src/workspaces/project/packages/dep/src/sub/folder/index.ts export const dep2 = 0;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "1") f.VerifyImportFixAtPosition(t, []string{ `import { dep1 } from "dep"; diff --git a/internal/fourslash/tests/gen/autoImportCrossProject_paths_toSrc_test.go b/internal/fourslash/tests/gen/autoImportCrossProject_paths_toSrc_test.go index a3d25d2a86..11a2b532a6 100644 --- a/internal/fourslash/tests/gen/autoImportCrossProject_paths_toSrc_test.go +++ b/internal/fourslash/tests/gen/autoImportCrossProject_paths_toSrc_test.go @@ -45,6 +45,7 @@ export const dep1 = 0; // @Filename: /home/src/workspaces/project/packages/dep/src/sub/folder/index.ts export const dep2 = 0;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "1") f.VerifyImportFixAtPosition(t, []string{ `import { dep1 } from "dep"; diff --git a/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_stripSrc_test.go b/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_stripSrc_test.go index e369963053..3627800a89 100644 --- a/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_stripSrc_test.go +++ b/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_stripSrc_test.go @@ -40,6 +40,7 @@ import "./sub/folder"; export const dep = 0; // @link: /home/src/workspaces/project/packages/dep -> /home/src/workspaces/project/packages/app/node_modules/dep` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { dep } from "dep/sub/folder"; diff --git a/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toDist_test.go b/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toDist_test.go index b577b3b28d..9a8db8c438 100644 --- a/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toDist_test.go +++ b/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toDist_test.go @@ -40,6 +40,7 @@ import "./sub/folder"; export const dep = 0; // @link: /home/src/workspaces/project/packages/dep -> /home/src/workspaces/project/packages/app/node_modules/dep` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { dep } from "dep/dist/sub/folder"; diff --git a/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toSrc_test.go b/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toSrc_test.go index 17ae9884b0..b0e15cc961 100644 --- a/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toSrc_test.go +++ b/internal/fourslash/tests/gen/autoImportCrossProject_symlinks_toSrc_test.go @@ -37,6 +37,7 @@ import "./sub/folder"; export const dep = 0; // @link: /home/src/workspaces/project/packages/dep -> /home/src/workspaces/project/packages/app/node_modules/dep` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { dep } from "dep/src/sub/folder"; diff --git a/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport2_test.go b/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport2_test.go index 7d881d0e9f..f07dfa1200 100644 --- a/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport2_test.go +++ b/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport2_test.go @@ -20,6 +20,7 @@ export declare function useState(): void; // @Filename: /home/src/workspaces/project/index.ts useMemo/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{}, nil /*preferences*/) f.GoToBOF(t) diff --git a/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport3_test.go b/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport3_test.go index 8e8144e077..56ecdf8f47 100644 --- a/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport3_test.go +++ b/internal/fourslash/tests/gen/autoImportPackageJsonFilterExistingImport3_test.go @@ -22,6 +22,7 @@ declare module "node:fs" { // @Filename: /home/src/workspaces/project/index.ts readFile/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{}, nil /*preferences*/) f.GoToBOF(t) diff --git a/internal/fourslash/tests/gen/autoImportProvider4_test.go b/internal/fourslash/tests/gen/autoImportProvider4_test.go index 44dcb137e8..d548b38f1a 100644 --- a/internal/fourslash/tests/gen/autoImportProvider4_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider4_test.go @@ -25,6 +25,7 @@ new Shape/**/ export class Shape {} // @link: /home/src/workspaces/project/b -> /home/src/workspaces/project/a/node_modules/b` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { Shape } from "b"; diff --git a/internal/fourslash/tests/gen/autoImportProvider5_test.go b/internal/fourslash/tests/gen/autoImportProvider5_test.go index 147ea11146..766167d218 100644 --- a/internal/fourslash/tests/gen/autoImportProvider5_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider5_test.go @@ -22,6 +22,7 @@ export declare function useForm(): void; // @Filename: /home/src/workspaces/project/index.ts useForm/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { useForm } from "react-hook-form"; diff --git a/internal/fourslash/tests/gen/autoImportProvider6_test.go b/internal/fourslash/tests/gen/autoImportProvider6_test.go index eeb92339c0..3321c43cc1 100644 --- a/internal/fourslash/tests/gen/autoImportProvider6_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider6_test.go @@ -25,6 +25,7 @@ import "react"; // @Filename: /home/src/workspaces/project/index.ts Component/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap1_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap1_test.go index 82b994d822..5e4fb14290 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap1_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap1_test.go @@ -48,6 +48,7 @@ export function fooFromLol(): void; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap2_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap2_test.go index 57eb4b8e9a..75c5e70f58 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap2_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap2_test.go @@ -50,6 +50,7 @@ export function fooFromLol(): void; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap3_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap3_test.go index 8f44b395be..3153dde6c0 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap3_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap3_test.go @@ -41,6 +41,7 @@ export function fooFromLol(): void; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap4_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap4_test.go index 9df1a5a2fd..b5b60ce752 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap4_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap4_test.go @@ -44,6 +44,7 @@ export function fooFromLol(): void; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap5_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap5_test.go index 7e92a21a2b..5a986f145d 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap5_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap5_test.go @@ -59,6 +59,7 @@ export declare function fooFromLol(): void; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap6_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap6_test.go index 47d78b34d8..0e6df678fe 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap6_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap6_test.go @@ -66,6 +66,7 @@ export declare function fooFromAtTypesLol(): void; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap7_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap7_test.go index 7088378a8e..6f50518cf5 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap7_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap7_test.go @@ -50,6 +50,7 @@ import { fooFromIndex } from "dependency"; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap8_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap8_test.go index c31f19f053..9cd47b19df 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap8_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap8_test.go @@ -50,6 +50,7 @@ fooFrom/*cts*/ // @Filename: /home/src/workspaces/project/src/foo.mts fooFrom/*mts*/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "cts") f.VerifyCompletions(t, "cts", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_exportMap9_test.go b/internal/fourslash/tests/gen/autoImportProvider_exportMap9_test.go index dd90f2c0fa..46917e438b 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_exportMap9_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_exportMap9_test.go @@ -45,6 +45,7 @@ import { fooFromIndex } from "dependency"; // @Filename: /home/src/workspaces/project/src/foo.ts fooFrom/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_globalTypingsCache_test.go b/internal/fourslash/tests/gen/autoImportProvider_globalTypingsCache_test.go index e4c20f6b8c..6b1da54d18 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_globalTypingsCache_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_globalTypingsCache_test.go @@ -32,6 +32,7 @@ func TestAutoImportProvider_globalTypingsCache(t *testing.T) { // @Filename: /home/src/workspaces/project/index.js BrowserRouter/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/autoImportProvider_namespaceSameNameAsIntrinsic_test.go b/internal/fourslash/tests/gen/autoImportProvider_namespaceSameNameAsIntrinsic_test.go index 958cb934c0..3e5068a6ec 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_namespaceSameNameAsIntrinsic_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_namespaceSameNameAsIntrinsic_test.go @@ -28,6 +28,7 @@ export type SafeString = string; // @Filename: /home/src/workspaces/project/index.ts type A = { name: string/**/ }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportProvider_pnpm_test.go b/internal/fourslash/tests/gen/autoImportProvider_pnpm_test.go index d2b4646c72..eb05ee98d3 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_pnpm_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_pnpm_test.go @@ -23,6 +23,7 @@ export declare function autorun(): void; autorun/**/ // @link: /home/src/workspaces/project/node_modules/.pnpm/mobx@6.0.4/node_modules/mobx -> /home/src/workspaces/project/node_modules/mobx` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { autorun } from "mobx"; diff --git a/internal/fourslash/tests/gen/autoImportProvider_referencesCrash_test.go b/internal/fourslash/tests/gen/autoImportProvider_referencesCrash_test.go index 4189016e57..e5b211c395 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_referencesCrash_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_referencesCrash_test.go @@ -39,6 +39,7 @@ new A/**/(); export {}; // @link: /home/src/workspaces/project/a -> /home/src/workspaces/project/c/node_modules/a` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/home/src/workspaces/project/c/index.ts") f.VerifyBaselineFindAllReferences(t, "") } diff --git a/internal/fourslash/tests/gen/autoImportProvider_wildcardExports1_test.go b/internal/fourslash/tests/gen/autoImportProvider_wildcardExports1_test.go index 4a12fc1dde..1735b31c24 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_wildcardExports1_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_wildcardExports1_test.go @@ -55,6 +55,7 @@ export const d1: number; // @Filename: /home/src/workspaces/project/main.ts /**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/autoImportProvider_wildcardExports2_test.go b/internal/fourslash/tests/gen/autoImportProvider_wildcardExports2_test.go index efaa6244a9..c3ab6fe2be 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_wildcardExports2_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_wildcardExports2_test.go @@ -43,6 +43,7 @@ export function test(): void; // @Filename: /home/src/workspaces/project/main.ts /**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/autoImportProvider_wildcardExports3_test.go b/internal/fourslash/tests/gen/autoImportProvider_wildcardExports3_test.go index ac0430073b..cb23c79e1b 100644 --- a/internal/fourslash/tests/gen/autoImportProvider_wildcardExports3_test.go +++ b/internal/fourslash/tests/gen/autoImportProvider_wildcardExports3_test.go @@ -46,6 +46,7 @@ export const Card = () => null; (); // @link: /home/src/workspaces/project/packages/ui -> /home/src/workspaces/project/apps/web/node_modules/@repo/ui` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/autoImportReExportFromAmbientModule_test.go b/internal/fourslash/tests/gen/autoImportReExportFromAmbientModule_test.go index a685a1a371..ef77d2add2 100644 --- a/internal/fourslash/tests/gen/autoImportReExportFromAmbientModule_test.go +++ b/internal/fourslash/tests/gen/autoImportReExportFromAmbientModule_test.go @@ -29,6 +29,7 @@ export * from "fs"; // @Filename: /home/src/workspaces/project/index.ts access/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/completions01_test.go b/internal/fourslash/tests/gen/completions01_test.go index c45a912378..1318192ba9 100644 --- a/internal/fourslash/tests/gen/completions01_test.go +++ b/internal/fourslash/tests/gen/completions01_test.go @@ -16,6 +16,7 @@ func TestCompletions01(t *testing.T) { x.forEach(function (y) { y/*1*/ x.forEach(y => y/*2*/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "1") f.Insert(t, ".") f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{ diff --git a/internal/fourslash/tests/gen/completions03_test.go b/internal/fourslash/tests/gen/completions03_test.go index e2a1f5b622..b05b9407f0 100644 --- a/internal/fourslash/tests/gen/completions03_test.go +++ b/internal/fourslash/tests/gen/completions03_test.go @@ -24,6 +24,7 @@ let x: Foo = { /**/ }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/completionsImport_computedSymbolName_test.go b/internal/fourslash/tests/gen/completionsImport_computedSymbolName_test.go index 6c98e8fbac..3b793cc756 100644 --- a/internal/fourslash/tests/gen/completionsImport_computedSymbolName_test.go +++ b/internal/fourslash/tests/gen/completionsImport_computedSymbolName_test.go @@ -39,6 +39,7 @@ declare module "process" { // @Filename: /home/src/workspaces/project/index.ts I/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/completionsImport_mergedReExport_test.go b/internal/fourslash/tests/gen/completionsImport_mergedReExport_test.go index 7b62f55d6c..0ade668075 100644 --- a/internal/fourslash/tests/gen/completionsImport_mergedReExport_test.go +++ b/internal/fourslash/tests/gen/completionsImport_mergedReExport_test.go @@ -39,6 +39,7 @@ declare module "@jest/types" { // @Filename: /home/src/workspaces/project/index.ts C/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/completionsImport_sortingModuleSpecifiers_test.go b/internal/fourslash/tests/gen/completionsImport_sortingModuleSpecifiers_test.go index 625ab87cce..55aef8a1b6 100644 --- a/internal/fourslash/tests/gen/completionsImport_sortingModuleSpecifiers_test.go +++ b/internal/fourslash/tests/gen/completionsImport_sortingModuleSpecifiers_test.go @@ -29,6 +29,7 @@ declare module "path" { // @Filename: main.ts normalize/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/declarationMapGoToDefinition_test.go b/internal/fourslash/tests/gen/declarationMapGoToDefinition_test.go index b77522b6cd..f60b2538e2 100644 --- a/internal/fourslash/tests/gen/declarationMapGoToDefinition_test.go +++ b/internal/fourslash/tests/gen/declarationMapGoToDefinition_test.go @@ -49,5 +49,6 @@ import * as mod from "./indexdef"; const instance = new mod.Foo(); instance.[|/*1*/methodName|]({member: 12});` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToDefinition(t, true, "1") } diff --git a/internal/fourslash/tests/gen/declarationMapsGoToDefinitionRelativeSourceRoot_test.go b/internal/fourslash/tests/gen/declarationMapsGoToDefinitionRelativeSourceRoot_test.go index 7f4d1e1932..52a1d8b01b 100644 --- a/internal/fourslash/tests/gen/declarationMapsGoToDefinitionRelativeSourceRoot_test.go +++ b/internal/fourslash/tests/gen/declarationMapsGoToDefinitionRelativeSourceRoot_test.go @@ -49,5 +49,6 @@ import * as mod from "./out/indexdef"; const instance = new mod.Foo(); instance.[|/*1*/methodName|]({member: 12});` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToDefinition(t, true, "1") } diff --git a/internal/fourslash/tests/gen/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go b/internal/fourslash/tests/gen/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go index 0db6a36b7e..b990faf552 100644 --- a/internal/fourslash/tests/gen/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go +++ b/internal/fourslash/tests/gen/declarationMapsGoToDefinitionSameNameDifferentDirectory_test.go @@ -66,5 +66,6 @@ class Button extends [|/*1*/Control|] { } }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToDefinition(t, true, "1", "3") } diff --git a/internal/fourslash/tests/gen/declarationMapsOutOfDateMapping_test.go b/internal/fourslash/tests/gen/declarationMapsOutOfDateMapping_test.go index a1746bd3d8..6949f56815 100644 --- a/internal/fourslash/tests/gen/declarationMapsOutOfDateMapping_test.go +++ b/internal/fourslash/tests/gen/declarationMapsOutOfDateMapping_test.go @@ -33,6 +33,7 @@ export class /*2*/Foo { // @Filename: /home/src/workspaces/project/index.ts import { Foo/*1*/ } from "a";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/home/src/workspaces/project/index.ts") f.VerifyBaselineGoToDefinition(t, false, "1") } diff --git a/internal/fourslash/tests/gen/definition01_test.go b/internal/fourslash/tests/gen/definition01_test.go index 1b241e3ad6..028a8aa391 100644 --- a/internal/fourslash/tests/gen/definition01_test.go +++ b/internal/fourslash/tests/gen/definition01_test.go @@ -17,5 +17,6 @@ var x = new n.Foo(); // @Filename: a.ts /*2*/export class Foo {}` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToDefinition(t, true, "1") } diff --git a/internal/fourslash/tests/gen/documentHighlights01_test.go b/internal/fourslash/tests/gen/documentHighlights01_test.go index 27c28183c0..6e3c9c188a 100644 --- a/internal/fourslash/tests/gen/documentHighlights01_test.go +++ b/internal/fourslash/tests/gen/documentHighlights01_test.go @@ -17,5 +17,6 @@ function [|f|](x: typeof [|f|]) { [|f|]([|f|]); }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineDocumentHighlights(t, nil /*preferences*/, ToAny(f.Ranges())...) } diff --git a/internal/fourslash/tests/gen/documentHighlightsTypeParameterInHeritageClause01_test.go b/internal/fourslash/tests/gen/documentHighlightsTypeParameterInHeritageClause01_test.go index 8eee5defce..ec6bef6214 100644 --- a/internal/fourslash/tests/gen/documentHighlightsTypeParameterInHeritageClause01_test.go +++ b/internal/fourslash/tests/gen/documentHighlightsTypeParameterInHeritageClause01_test.go @@ -15,5 +15,6 @@ func TestDocumentHighlightsTypeParameterInHeritageClause01(t *testing.T) { const content = `interface I<[|T|]> extends I<[|T|]>, [|T|] { }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineDocumentHighlights(t, nil /*preferences*/, ToAny(f.Ranges())...) } diff --git a/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics01_test.go b/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics01_test.go index 397b6a2173..989e0903c2 100644 --- a/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics01_test.go +++ b/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics01_test.go @@ -15,5 +15,6 @@ func TestGetJavaScriptSyntacticDiagnostics01(t *testing.T) { // @Filename: a.js var ===;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineNonSuggestionDiagnostics(t) } diff --git a/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics02_test.go b/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics02_test.go index 149ad70f75..2a52729b9b 100644 --- a/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics02_test.go +++ b/internal/fourslash/tests/gen/getJavaScriptSyntacticDiagnostics02_test.go @@ -18,5 +18,6 @@ var b: boolean = true; function foo(): string { } var var = "c";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineNonSuggestionDiagnostics(t) } diff --git a/internal/fourslash/tests/gen/goToDefinitionScriptImportServer_test.go b/internal/fourslash/tests/gen/goToDefinitionScriptImportServer_test.go index 2fbe0acf00..875ca1c75a 100644 --- a/internal/fourslash/tests/gen/goToDefinitionScriptImportServer_test.go +++ b/internal/fourslash/tests/gen/goToDefinitionScriptImportServer_test.go @@ -22,5 +22,6 @@ import [|/*1*/"./scriptThing"|]; import [|/*2*/"./stylez.css"|]; import [|/*3*/"./foo.txt"|];` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToDefinition(t, true, "1", "2", "3") } diff --git a/internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go b/internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go index 3b520e9c75..23ac008447 100644 --- a/internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go +++ b/internal/fourslash/tests/gen/goToImplementation_inDifferentFiles_test.go @@ -26,5 +26,6 @@ export interface /**/Foo { func(); }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToImplementation(t, "") } diff --git a/internal/fourslash/tests/gen/implementation01_test.go b/internal/fourslash/tests/gen/implementation01_test.go index 4239432c55..2e3b57c619 100644 --- a/internal/fourslash/tests/gen/implementation01_test.go +++ b/internal/fourslash/tests/gen/implementation01_test.go @@ -14,5 +14,6 @@ func TestImplementation01(t *testing.T) { const content = `interface Fo/*1*/o {} class /*2*/Bar implements Foo {}` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToImplementation(t, "1") } diff --git a/internal/fourslash/tests/gen/importCompletions_importsMap1_test.go b/internal/fourslash/tests/gen/importCompletions_importsMap1_test.go index 4b173fb093..8a15ddefce 100644 --- a/internal/fourslash/tests/gen/importCompletions_importsMap1_test.go +++ b/internal/fourslash/tests/gen/importCompletions_importsMap1_test.go @@ -37,6 +37,7 @@ export const isBrowser = false; // @Filename: /home/src/workspaces/project/src/a.ts import {} from "/*1*/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, []string{"1"}, &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/importCompletions_importsMap2_test.go b/internal/fourslash/tests/gen/importCompletions_importsMap2_test.go index 8a602bf253..8c025e19e0 100644 --- a/internal/fourslash/tests/gen/importCompletions_importsMap2_test.go +++ b/internal/fourslash/tests/gen/importCompletions_importsMap2_test.go @@ -33,6 +33,7 @@ export function something(name: string) {} import {} from "/*1*/"; import {} from "#internal//*2*/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, []string{"1"}, &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/importCompletions_importsMap3_test.go b/internal/fourslash/tests/gen/importCompletions_importsMap3_test.go index 8b7ddfd85d..13ddd8f868 100644 --- a/internal/fourslash/tests/gen/importCompletions_importsMap3_test.go +++ b/internal/fourslash/tests/gen/importCompletions_importsMap3_test.go @@ -33,6 +33,7 @@ export function something(name: string) {} import {} from "/*1*/"; import {} from "#internal//*2*/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, []string{"1"}, &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/importCompletions_importsMap4_test.go b/internal/fourslash/tests/gen/importCompletions_importsMap4_test.go index d1ed920327..041a06d42e 100644 --- a/internal/fourslash/tests/gen/importCompletions_importsMap4_test.go +++ b/internal/fourslash/tests/gen/importCompletions_importsMap4_test.go @@ -35,6 +35,7 @@ export const isBrowser = true; // @Filename: /home/src/workspaces/project/src/a.ts import {} from "/*1*/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, []string{"1"}, &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/importCompletions_importsMap5_test.go b/internal/fourslash/tests/gen/importCompletions_importsMap5_test.go index 18b3397015..0b610c6ab1 100644 --- a/internal/fourslash/tests/gen/importCompletions_importsMap5_test.go +++ b/internal/fourslash/tests/gen/importCompletions_importsMap5_test.go @@ -36,6 +36,7 @@ export const isBrowser = true; // @Filename: /home/src/workspaces/project/src/a.ts import {} from "/*1*/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, []string{"1"}, &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/importNameCodeFix_pnpm1_test.go b/internal/fourslash/tests/gen/importNameCodeFix_pnpm1_test.go index 2d91a8fd41..3cfca3130e 100644 --- a/internal/fourslash/tests/gen/importNameCodeFix_pnpm1_test.go +++ b/internal/fourslash/tests/gen/importNameCodeFix_pnpm1_test.go @@ -19,6 +19,7 @@ export declare function Component(): void; Component/**/ // @link: /home/src/workspaces/project/node_modules/.pnpm/@types+react@17.0.7/node_modules/@types/react -> /home/src/workspaces/project/node_modules/@types/react` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyImportFixAtPosition(t, []string{ `import { Component } from "react"; diff --git a/internal/fourslash/tests/gen/importStatementCompletions_pnpmTransitive_test.go b/internal/fourslash/tests/gen/importStatementCompletions_pnpmTransitive_test.go index 297213158f..e8345d759f 100644 --- a/internal/fourslash/tests/gen/importStatementCompletions_pnpmTransitive_test.go +++ b/internal/fourslash/tests/gen/importStatementCompletions_pnpmTransitive_test.go @@ -26,6 +26,7 @@ export interface SvgProperties {} // @link: /home/src/workspaces/project/node_modules/.pnpm/@types+react@17.0.7/node_modules/@types/react -> /home/src/workspaces/project/node_modules/@types/react // @link: /home/src/workspaces/project/node_modules/.pnpm/csstype@3.0.8/node_modules/csstype -> /home/src/workspaces/project/node_modules/.pnpm/@types+react@17.0.7/node_modules/csstype` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/importSuggestionsCache_exportUndefined_test.go b/internal/fourslash/tests/gen/importSuggestionsCache_exportUndefined_test.go index ede6bfef6d..01958857fa 100644 --- a/internal/fourslash/tests/gen/importSuggestionsCache_exportUndefined_test.go +++ b/internal/fourslash/tests/gen/importSuggestionsCache_exportUndefined_test.go @@ -24,6 +24,7 @@ export = x; // @Filename: /home/src/workspaces/project/index.ts /**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/importSuggestionsCache_invalidPackageJson_test.go b/internal/fourslash/tests/gen/importSuggestionsCache_invalidPackageJson_test.go index 7ca5b026fc..93fa013317 100644 --- a/internal/fourslash/tests/gen/importSuggestionsCache_invalidPackageJson_test.go +++ b/internal/fourslash/tests/gen/importSuggestionsCache_invalidPackageJson_test.go @@ -33,6 +33,7 @@ declare module 'util' { readF/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{ IsIncomplete: false, diff --git a/internal/fourslash/tests/gen/isDefinitionAcrossGlobalProjects_test.go b/internal/fourslash/tests/gen/isDefinitionAcrossGlobalProjects_test.go index cdcdc26f23..899c50a933 100644 --- a/internal/fourslash/tests/gen/isDefinitionAcrossGlobalProjects_test.go +++ b/internal/fourslash/tests/gen/isDefinitionAcrossGlobalProjects_test.go @@ -93,5 +93,6 @@ const ic: I = { FC() {} }; } }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1", "2", "3", "4", "5", "6", "7", "8", "9") } diff --git a/internal/fourslash/tests/gen/isDefinitionAcrossModuleProjects_test.go b/internal/fourslash/tests/gen/isDefinitionAcrossModuleProjects_test.go index 98a8ee14d6..1fc91e1930 100644 --- a/internal/fourslash/tests/gen/isDefinitionAcrossModuleProjects_test.go +++ b/internal/fourslash/tests/gen/isDefinitionAcrossModuleProjects_test.go @@ -132,5 +132,6 @@ const ic: I = { FC() {} }; } }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12") } diff --git a/internal/fourslash/tests/gen/jsdocCallbackTagRename01_test.go b/internal/fourslash/tests/gen/jsdocCallbackTagRename01_test.go index 1a7111c69a..9787d53837 100644 --- a/internal/fourslash/tests/gen/jsdocCallbackTagRename01_test.go +++ b/internal/fourslash/tests/gen/jsdocCallbackTagRename01_test.go @@ -22,5 +22,6 @@ func TestJsdocCallbackTagRename01(t *testing.T) { /** @type {/*1*/[|FooCallback|]} */ var t;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineRename(t, nil /*preferences*/, f.Ranges()[1]) } diff --git a/internal/fourslash/tests/gen/jsdocCallbackTag_test.go b/internal/fourslash/tests/gen/jsdocCallbackTag_test.go index 0a2845f5b7..dcc7183c34 100644 --- a/internal/fourslash/tests/gen/jsdocCallbackTag_test.go +++ b/internal/fourslash/tests/gen/jsdocCallbackTag_test.go @@ -36,6 +36,7 @@ var t/*1*/; var t2/*2*/; t(/*4*/"!", /*5*/12, /*6*/false);` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "1") f.VerifyQuickInfoIs(t, "var t: FooHandler", "") f.GoToMarker(t, "2") diff --git a/internal/fourslash/tests/gen/jsdocParamTagSpecialKeywords_test.go b/internal/fourslash/tests/gen/jsdocParamTagSpecialKeywords_test.go index fb79362df2..aedce38af1 100644 --- a/internal/fourslash/tests/gen/jsdocParamTagSpecialKeywords_test.go +++ b/internal/fourslash/tests/gen/jsdocParamTagSpecialKeywords_test.go @@ -21,6 +21,7 @@ function test(type) { type./**/ }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/jsdocTypedefTag1_test.go b/internal/fourslash/tests/gen/jsdocTypedefTag1_test.go index c8bf9b0835..f39b7b8cb6 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTag1_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTag1_test.go @@ -26,6 +26,7 @@ function a(my) { my.yes./*1*/ }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/jsdocTypedefTag2_test.go b/internal/fourslash/tests/gen/jsdocTypedefTag2_test.go index 25244841a1..fa892122eb 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTag2_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTag2_test.go @@ -32,6 +32,7 @@ function b(my2) { my2.yes./*2*/ }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/jsdocTypedefTagGoToDefinition_test.go b/internal/fourslash/tests/gen/jsdocTypedefTagGoToDefinition_test.go index 2e946f5836..412999af5d 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTagGoToDefinition_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTagGoToDefinition_test.go @@ -29,5 +29,6 @@ var person; person.[|personName/*3*/|] /** @type {Animal} */ var animal; animal.[|animalName/*4*/|]` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToDefinition(t, true, "3", "4") } diff --git a/internal/fourslash/tests/gen/jsdocTypedefTagNamespace_test.go b/internal/fourslash/tests/gen/jsdocTypedefTagNamespace_test.go index 700956e582..085d27d180 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTagNamespace_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTagNamespace_test.go @@ -28,6 +28,7 @@ var x1; x1./*2*/; /** @type {T.People} */ var x1; x1./*3*/;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, []string{"1", "3"}, &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/jsdocTypedefTagRename01_test.go b/internal/fourslash/tests/gen/jsdocTypedefTagRename01_test.go index 47ef05dc8c..8d1c9c8e5b 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTagRename01_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTagRename01_test.go @@ -23,5 +23,6 @@ func TestJsdocTypedefTagRename01(t *testing.T) { /** @type {[|NumberLike|]} */ var numberLike;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineRename(t, nil /*preferences*/, ToAny(f.Ranges()[1:])...) } diff --git a/internal/fourslash/tests/gen/jsdocTypedefTagRename02_test.go b/internal/fourslash/tests/gen/jsdocTypedefTagRename02_test.go index 2fbe40851c..a0515e6d7f 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTagRename02_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTagRename02_test.go @@ -20,5 +20,6 @@ func TestJsdocTypedefTagRename02(t *testing.T) { /** @type {[|NumberLike|]} */ var numberLike;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineRename(t, nil /*preferences*/, ToAny(f.Ranges()[1:])...) } diff --git a/internal/fourslash/tests/gen/jsdocTypedefTagRename03_test.go b/internal/fourslash/tests/gen/jsdocTypedefTagRename03_test.go index 94c632a2ee..df2250f595 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTagRename03_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTagRename03_test.go @@ -25,6 +25,7 @@ func TestJsdocTypedefTagRename03(t *testing.T) { /** @type {/*2*/[|Person|]} */ var person;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "jsDocTypedef_form3.js") f.VerifyBaselineRename(t, nil /*preferences*/, ToAny(f.GetRangesByText().Get("Person"))...) } diff --git a/internal/fourslash/tests/gen/jsdocTypedefTagRename04_test.go b/internal/fourslash/tests/gen/jsdocTypedefTagRename04_test.go index 5e8b871a75..5321f95570 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTagRename04_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTagRename04_test.go @@ -27,6 +27,7 @@ function test2() { var n/*2*/umberLike2; }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "2") f.VerifyQuickInfoExists(t) f.GoToMarker(t, "1") diff --git a/internal/fourslash/tests/gen/jsdocTypedefTag_test.go b/internal/fourslash/tests/gen/jsdocTypedefTag_test.go index bf281d7383..06d7625846 100644 --- a/internal/fourslash/tests/gen/jsdocTypedefTag_test.go +++ b/internal/fourslash/tests/gen/jsdocTypedefTag_test.go @@ -62,6 +62,7 @@ var d;d./*dog*/; d.dogName./*dogName*/; d.dogAge./*dogAge*/;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "numberLike", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/ngProxy1_test.go b/internal/fourslash/tests/gen/ngProxy1_test.go index 7c23c1665b..5dc4381f4e 100644 --- a/internal/fourslash/tests/gen/ngProxy1_test.go +++ b/internal/fourslash/tests/gen/ngProxy1_test.go @@ -25,6 +25,7 @@ let x = [1, 2]; x/**/ ` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyQuickInfoIs(t, "Proxied x: number[]hello world", "") } diff --git a/internal/fourslash/tests/gen/ngProxy2_test.go b/internal/fourslash/tests/gen/ngProxy2_test.go index e53421a96c..99095ba7f9 100644 --- a/internal/fourslash/tests/gen/ngProxy2_test.go +++ b/internal/fourslash/tests/gen/ngProxy2_test.go @@ -25,6 +25,7 @@ let x = [1, 2]; x/**/ ` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyQuickInfoIs(t, "let x: number[]", "") } diff --git a/internal/fourslash/tests/gen/ngProxy3_test.go b/internal/fourslash/tests/gen/ngProxy3_test.go index 82eadb4b9a..e7c63ac793 100644 --- a/internal/fourslash/tests/gen/ngProxy3_test.go +++ b/internal/fourslash/tests/gen/ngProxy3_test.go @@ -25,6 +25,7 @@ let x = [1, 2]; x/**/ ` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.VerifyQuickInfoIs(t, "let x: number[]", "") } diff --git a/internal/fourslash/tests/gen/occurrences01_test.go b/internal/fourslash/tests/gen/occurrences01_test.go index a50d465552..ec88fd7643 100644 --- a/internal/fourslash/tests/gen/occurrences01_test.go +++ b/internal/fourslash/tests/gen/occurrences01_test.go @@ -22,5 +22,6 @@ func TestOccurrences01(t *testing.T) { continue foo; }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineDocumentHighlights(t, nil /*preferences*/, ToAny(f.Ranges())...) } diff --git a/internal/fourslash/tests/gen/occurrences02_test.go b/internal/fourslash/tests/gen/occurrences02_test.go index c58ac51a81..030e4e5cca 100644 --- a/internal/fourslash/tests/gen/occurrences02_test.go +++ b/internal/fourslash/tests/gen/occurrences02_test.go @@ -16,5 +16,6 @@ func TestOccurrences02(t *testing.T) { [|f|]([|f|]); }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineDocumentHighlights(t, nil /*preferences*/, ToAny(f.Ranges())...) } diff --git a/internal/fourslash/tests/gen/packageJsonImportsFailedLookups_test.go b/internal/fourslash/tests/gen/packageJsonImportsFailedLookups_test.go index 365843622a..5323ef6e47 100644 --- a/internal/fourslash/tests/gen/packageJsonImportsFailedLookups_test.go +++ b/internal/fourslash/tests/gen/packageJsonImportsFailedLookups_test.go @@ -25,5 +25,6 @@ export function add(a: number, b: number): number; // @Filename: /a/b/c/d/e/index.ts import { add } from "#utils";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/a/b/c/d/e/index.ts") } diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard1_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard1_test.go index f8235bb257..a9d3722505 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard1_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard1_test.go @@ -49,6 +49,7 @@ export const arguments = 0; // @Filename: /home/src/workspaces/project/src/m.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard2_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard2_test.go index b7e9f9eeec..2ec3035bf9 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard2_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard2_test.go @@ -38,6 +38,7 @@ export const actionRenderer = 0; // @Filename: /home/src/workspaces/project/src/index.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard3_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard3_test.go index 2c0e1ed65a..f73d73aed2 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard3_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard3_test.go @@ -42,6 +42,7 @@ export const one = 0; // @Filename: /home/src/workspaces/project/src/a.ts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard4_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard4_test.go index 3049b80acd..27315790d6 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard4_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard4_test.go @@ -44,6 +44,7 @@ export const one = 0; // @Filename: /home/src/workspaces/project/src/a.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard5_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard5_test.go index 3b71292027..ef93cdf3d3 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard5_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard5_test.go @@ -60,6 +60,7 @@ export const onlyInCjs = 0; // @Filename: /home/src/workspaces/project/src/index.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard6_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard6_test.go index e369dd185e..3f98e516b2 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard6_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard6_test.go @@ -38,6 +38,7 @@ export const blah = 0; // @Filename: /home/src/workspaces/project/src/m.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard7_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard7_test.go index f373400a89..ca80aa3fcf 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard7_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard7_test.go @@ -33,6 +33,7 @@ export const blah = 0; // @Filename: /home/src/workspaces/project/src/index.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard8_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard8_test.go index ea9fa0a684..3c5591ada3 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard8_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard8_test.go @@ -33,6 +33,7 @@ export const blah = 0; // @Filename: /home/src/workspaces/project/src/index.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard9_test.go b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard9_test.go index 3cacb1bd30..d4d872350d 100644 --- a/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard9_test.go +++ b/internal/fourslash/tests/gen/pathCompletionsPackageJsonImportsSrcNoDistWildcard9_test.go @@ -34,6 +34,7 @@ export const blah = 0; // @Filename: /home/src/workspaces/project/src/index.mts import { } from "/**/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/quickinfo01_test.go b/internal/fourslash/tests/gen/quickinfo01_test.go index 729ced2175..dcd078181b 100644 --- a/internal/fourslash/tests/gen/quickinfo01_test.go +++ b/internal/fourslash/tests/gen/quickinfo01_test.go @@ -26,6 +26,7 @@ var /*1*/x : One | Two; x./*2*/commonProperty; x./*3*/commonFunction;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyQuickInfoAt(t, "1", "var x: One | Two", "") f.VerifyQuickInfoAt(t, "2", "(property) commonProperty: string | number", "") f.VerifyQuickInfoAt(t, "3", "(method) commonFunction(): number", "") diff --git a/internal/fourslash/tests/gen/quickinfoWrongComment_test.go b/internal/fourslash/tests/gen/quickinfoWrongComment_test.go index c6210f6e38..d93e547faa 100644 --- a/internal/fourslash/tests/gen/quickinfoWrongComment_test.go +++ b/internal/fourslash/tests/gen/quickinfoWrongComment_test.go @@ -25,6 +25,7 @@ type F = A | B const f: F = { colour: "green" } f.colour/*1*/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "1") f.VerifyQuickInfoIs(t, "(property) colour: \"green\" | \"red\" | \"yellow\"", "The colour") } diff --git a/internal/fourslash/tests/gen/referenceToEmptyObject_test.go b/internal/fourslash/tests/gen/referenceToEmptyObject_test.go index ddd33ebfbf..bb7fe5b3bc 100644 --- a/internal/fourslash/tests/gen/referenceToEmptyObject_test.go +++ b/internal/fourslash/tests/gen/referenceToEmptyObject_test.go @@ -13,5 +13,6 @@ func TestReferenceToEmptyObject(t *testing.T) { defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = `const obj = {}/*1*/;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1") } diff --git a/internal/fourslash/tests/gen/references01_test.go b/internal/fourslash/tests/gen/references01_test.go index a0930537a1..cb20271504 100644 --- a/internal/fourslash/tests/gen/references01_test.go +++ b/internal/fourslash/tests/gen/references01_test.go @@ -19,5 +19,6 @@ class /*0*/globalClass { /// var c = /*1*/globalClass();` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1") } diff --git a/internal/fourslash/tests/gen/referencesInConfiguredProject_test.go b/internal/fourslash/tests/gen/referencesInConfiguredProject_test.go index 618ebb7428..05e161123a 100644 --- a/internal/fourslash/tests/gen/referencesInConfiguredProject_test.go +++ b/internal/fourslash/tests/gen/referencesInConfiguredProject_test.go @@ -20,5 +20,6 @@ var c = /*1*/globalClass(); // @Filename: /home/src/workspaces/project/tsconfig.json { "files": ["referencesForGlobals_1.ts", "referencesForGlobals_2.ts"] }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1") } diff --git a/internal/fourslash/tests/gen/referencesInEmptyFileWithMultipleProjects_test.go b/internal/fourslash/tests/gen/referencesInEmptyFileWithMultipleProjects_test.go index 04141f4343..59d73dd0c3 100644 --- a/internal/fourslash/tests/gen/referencesInEmptyFileWithMultipleProjects_test.go +++ b/internal/fourslash/tests/gen/referencesInEmptyFileWithMultipleProjects_test.go @@ -21,5 +21,6 @@ func TestReferencesInEmptyFileWithMultipleProjects(t *testing.T) { // @Filename: /home/src/workspaces/project/b/b.ts /*2*/;` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1", "2") } diff --git a/internal/fourslash/tests/gen/referencesInEmptyFile_test.go b/internal/fourslash/tests/gen/referencesInEmptyFile_test.go index 7afa6fcc96..775c13d3f5 100644 --- a/internal/fourslash/tests/gen/referencesInEmptyFile_test.go +++ b/internal/fourslash/tests/gen/referencesInEmptyFile_test.go @@ -13,5 +13,6 @@ func TestReferencesInEmptyFile(t *testing.T) { defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = `/*1*/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1") } diff --git a/internal/fourslash/tests/gen/referencesInStringLiteralValueWithMultipleProjects_test.go b/internal/fourslash/tests/gen/referencesInStringLiteralValueWithMultipleProjects_test.go index 2cbc1cc5d7..faef0508cf 100644 --- a/internal/fourslash/tests/gen/referencesInStringLiteralValueWithMultipleProjects_test.go +++ b/internal/fourslash/tests/gen/referencesInStringLiteralValueWithMultipleProjects_test.go @@ -21,5 +21,6 @@ const str: string = "hello/*1*/"; // @Filename: /home/src/workspaces/project/b/b.ts const str2: string = "hello/*2*/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1", "2") } diff --git a/internal/fourslash/tests/gen/referencesToNonPropertyNameStringLiteral_test.go b/internal/fourslash/tests/gen/referencesToNonPropertyNameStringLiteral_test.go index 43e383c407..470e79dffd 100644 --- a/internal/fourslash/tests/gen/referencesToNonPropertyNameStringLiteral_test.go +++ b/internal/fourslash/tests/gen/referencesToNonPropertyNameStringLiteral_test.go @@ -13,5 +13,6 @@ func TestReferencesToNonPropertyNameStringLiteral(t *testing.T) { defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = `const str: string = "hello/*1*/";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1") } diff --git a/internal/fourslash/tests/gen/referencesToStringLiteralValue_test.go b/internal/fourslash/tests/gen/referencesToStringLiteralValue_test.go index 8db6a6fca4..c3fa40cba2 100644 --- a/internal/fourslash/tests/gen/referencesToStringLiteralValue_test.go +++ b/internal/fourslash/tests/gen/referencesToStringLiteralValue_test.go @@ -13,5 +13,6 @@ func TestReferencesToStringLiteralValue(t *testing.T) { defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = `const s: string = "some /*1*/ string";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineFindAllReferences(t, "1") } diff --git a/internal/fourslash/tests/gen/rename01_test.go b/internal/fourslash/tests/gen/rename01_test.go index ba3cf9437d..2dfc07f89b 100644 --- a/internal/fourslash/tests/gen/rename01_test.go +++ b/internal/fourslash/tests/gen/rename01_test.go @@ -17,5 +17,6 @@ func TestRename01(t *testing.T) { "this is a reference to [|Bar|] in a string" }|]` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineRename(t, nil /*preferences*/, f.Ranges()[1]) } diff --git a/internal/fourslash/tests/gen/renameInConfiguredProject_test.go b/internal/fourslash/tests/gen/renameInConfiguredProject_test.go index 4e9262843d..ef954a230a 100644 --- a/internal/fourslash/tests/gen/renameInConfiguredProject_test.go +++ b/internal/fourslash/tests/gen/renameInConfiguredProject_test.go @@ -19,5 +19,6 @@ var y = [|globalName|]; // @Filename: tsconfig.json { "files": ["referencesForGlobals_1.ts", "referencesForGlobals_2.ts"] }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineRename(t, nil /*preferences*/, ToAny(f.Ranges()[1:])...) } diff --git a/internal/fourslash/tests/gen/renameNamedImport_test.go b/internal/fourslash/tests/gen/renameNamedImport_test.go index 174d6987df..64486a2227 100644 --- a/internal/fourslash/tests/gen/renameNamedImport_test.go +++ b/internal/fourslash/tests/gen/renameNamedImport_test.go @@ -26,6 +26,7 @@ someExportedVariable; // @Filename: /home/src/workspaces/project/tsconfig.json {}` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/home/src/workspaces/project/lib/index.ts") f.GoToFile(t, "/home/src/workspaces/project/src/index.ts") f.VerifyBaselineRename(t, &lsutil.UserPreferences{UseAliasesForRename: core.TSTrue}, "i") diff --git a/internal/fourslash/tests/gen/renameNamespaceImport_test.go b/internal/fourslash/tests/gen/renameNamespaceImport_test.go index f70dbbd6a4..3a022789be 100644 --- a/internal/fourslash/tests/gen/renameNamespaceImport_test.go +++ b/internal/fourslash/tests/gen/renameNamespaceImport_test.go @@ -24,6 +24,7 @@ lib.someExportedVariable; // @Filename: /home/src/workspaces/project/tsconfig.json {}` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/home/src/workspaces/project/lib/index.ts") f.GoToFile(t, "/home/src/workspaces/project/src/index.ts") f.VerifyBaselineRename(t, nil /*preferences*/, "i") diff --git a/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences1_test.go b/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences1_test.go index c1cad904d1..d53850c093 100644 --- a/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences1_test.go +++ b/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences1_test.go @@ -53,6 +53,7 @@ export {}; // @Filename: packages/main/src/index.ts import {} from "../../common/src/index.ts";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/packages/main/src/index.ts") f.VerifyBaselineNonSuggestionDiagnostics(t) } diff --git a/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences2_test.go b/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences2_test.go index c84c61ffb2..f545a320c3 100644 --- a/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences2_test.go +++ b/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences2_test.go @@ -39,6 +39,7 @@ export {}; // @Filename: src/services/services.ts import {} from "../compiler/parser.ts";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/src/services/services.ts") f.VerifyBaselineNonSuggestionDiagnostics(t) } diff --git a/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences3_test.go b/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences3_test.go index 4a9e14097c..4cb792e776 100644 --- a/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences3_test.go +++ b/internal/fourslash/tests/gen/rewriteRelativeImportExtensionsProjectReferences3_test.go @@ -42,6 +42,7 @@ export {}; // @Filename: src/services/services.ts import {} from "../compiler/parser.ts";` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToFile(t, "/src/services/services.ts") f.VerifyBaselineNonSuggestionDiagnostics(t) } diff --git a/internal/fourslash/tests/gen/signatureHelpJSDocCallbackTag_test.go b/internal/fourslash/tests/gen/signatureHelpJSDocCallbackTag_test.go index 4c5acb9335..d77d30d807 100644 --- a/internal/fourslash/tests/gen/signatureHelpJSDocCallbackTag_test.go +++ b/internal/fourslash/tests/gen/signatureHelpJSDocCallbackTag_test.go @@ -36,5 +36,6 @@ var t; var t2; t(/*4*/"!", /*5*/12, /*6*/false);` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineSignatureHelp(t) } diff --git a/internal/fourslash/tests/gen/tsconfigComputedPropertyError_test.go b/internal/fourslash/tests/gen/tsconfigComputedPropertyError_test.go index a631296955..b8e99cb695 100644 --- a/internal/fourslash/tests/gen/tsconfigComputedPropertyError_test.go +++ b/internal/fourslash/tests/gen/tsconfigComputedPropertyError_test.go @@ -20,5 +20,6 @@ func TestTsconfigComputedPropertyError(t *testing.T) { "compileOnSave": true }` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyNonSuggestionDiagnostics(t, nil) } diff --git a/internal/fourslash/tests/gen/tsxIncrementalServer_test.go b/internal/fourslash/tests/gen/tsxIncrementalServer_test.go index 30ef797b14..ca2911826c 100644 --- a/internal/fourslash/tests/gen/tsxIncrementalServer_test.go +++ b/internal/fourslash/tests/gen/tsxIncrementalServer_test.go @@ -13,6 +13,7 @@ func TestTsxIncrementalServer(t *testing.T) { defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = `/**/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.GoToMarker(t, "") f.Insert(t, "<") f.Insert(t, "div") diff --git a/internal/fourslash/tests/gen/typeReferenceOnServer_test.go b/internal/fourslash/tests/gen/typeReferenceOnServer_test.go index 39abae2258..5b10594eb4 100644 --- a/internal/fourslash/tests/gen/typeReferenceOnServer_test.go +++ b/internal/fourslash/tests/gen/typeReferenceOnServer_test.go @@ -16,6 +16,7 @@ func TestTypeReferenceOnServer(t *testing.T) { var x: number; x./*1*/` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{ IsIncomplete: false, ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ diff --git a/internal/fourslash/tests/gen/typedefinition01_test.go b/internal/fourslash/tests/gen/typedefinition01_test.go index dc025b79ad..89526e6290 100644 --- a/internal/fourslash/tests/gen/typedefinition01_test.go +++ b/internal/fourslash/tests/gen/typedefinition01_test.go @@ -17,5 +17,6 @@ var x/*1*/ = new n.Foo(); // @Filename: a.ts export class /*2*/Foo {}` f := fourslash.NewFourslash(t, nil /*capabilities*/, content) + f.MarkTestAsStradaServer() f.VerifyBaselineGoToTypeDefinition(t, "1") } diff --git a/internal/ls/findallreferences.go b/internal/ls/findallreferences.go index b2353aba28..8853b503b0 100644 --- a/internal/ls/findallreferences.go +++ b/internal/ls/findallreferences.go @@ -573,8 +573,7 @@ func (l *LanguageService) convertEntriesToLocationLinks(entries []*ReferenceEntr targetSelectionRange = l.createLspRangeFromRange(selectionTextRange, sourceFile) // Get the context range (broader scope including declaration context) - contextNode := core.OrElse(getContextNode(entry.node), entry.node) - contextTextRange := toContextRange(&selectionTextRange, sourceFile, contextNode) + contextTextRange := toContextRange(&selectionTextRange, sourceFile, entry.context) if contextTextRange != nil { targetRange = l.createLspRangeFromRange(*contextTextRange, sourceFile) } else { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc index 17b30a346a..b849de9e87 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/findAllRefsForDefaultExport.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /a.ts === -// export default function [|f|]() {} +// <|export default function [|f|]() {}|> // === /b.ts === // import g from "./a"; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc index 53c5b5e911..6bdd73b754 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAcrossMultipleProjects.baseline.jsonc @@ -1,15 +1,15 @@ // === goToDefinition === // === /a.ts === -// var [|x|]: number; +// <|var [|x|]: number;|> // === /b.ts === -// var [|x|]: number; +// <|var [|x|]: number;|> // === /c.ts === -// var [|x|]: number; +// <|var [|x|]: number;|> // === /d.ts === -// var [|x|]: number; +// <|var [|x|]: number;|> // === /e.ts === // /// diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc index 327d98ff29..d9487d1fbb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAlias.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /b.ts === -// import [|alias1|] = require("fileb"); +// <|import [|alias1|] = require("fileb");|> // module Module { // export import alias2 = alias1; // } @@ -17,7 +17,7 @@ // === goToDefinition === // === /b.ts === -// import [|alias1|] = require("fileb"); +// <|import [|alias1|] = require("fileb");|> // module Module { // export import alias2 = alias1; // } @@ -36,7 +36,7 @@ // === /b.ts === // import alias1 = require("fileb"); // module Module { -// export import [|alias2|] = alias1; +// <|export import [|alias2|] = alias1;|> // } // // // Type position @@ -53,7 +53,7 @@ // === /b.ts === // import alias1 = require("fileb"); // module Module { -// export import [|alias2|] = alias1; +// <|export import [|alias2|] = alias1;|> // } // // // Type position diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc index c6ec5cc560..5d8b48c16f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAmbiants.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionAmbiants.ts === -// declare var [|ambientVar|]; +// <|declare var [|ambientVar|];|> // declare function ambientFunction(); // declare class ambientClass { // constructor(); @@ -19,7 +19,7 @@ // === goToDefinition === // === /goToDefinitionAmbiants.ts === // declare var ambientVar; -// declare function [|ambientFunction|](); +// <|declare function [|ambientFunction|]();|> // declare class ambientClass { // constructor(); // static method(); @@ -38,11 +38,11 @@ // === /goToDefinitionAmbiants.ts === // declare var ambientVar; // declare function ambientFunction(); -// declare class [|ambientClass|] { +// <|declare class [|ambientClass|] { // [|constructor();|] // static method(); // public method(); -// } +// }|> // // ambientVar = 1; // ambientFunction(); @@ -58,7 +58,7 @@ // declare function ambientFunction(); // declare class ambientClass { // constructor(); -// static [|method|](); +// <|static [|method|]();|> // public method(); // } // @@ -77,7 +77,7 @@ // declare class ambientClass { // constructor(); // static method(); -// public [|method|](); +// <|public [|method|]();|> // } // // ambientVar = 1; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc index 5fc2e2ca45..d3518a8fcd 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionApparentTypeProperties.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionApparentTypeProperties.ts === // interface Number { -// [|myObjectMethod|](): number; +// <|[|myObjectMethod|](): number;|> // } // // var o = 0; @@ -13,7 +13,7 @@ // === goToDefinition === // === /goToDefinitionApparentTypeProperties.ts === // interface Number { -// [|myObjectMethod|](): number; +// <|[|myObjectMethod|](): number;|> // } // // var o = 0; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc index 85494107dd..910ecdecc6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait1.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /goToDefinitionAwait1.ts === -// async function [|foo|]() { +// <|async function [|foo|]() { // /*GOTO DEF*/await Promise.resolve(0); -// } +// }|> // function notAsync() { // await Promise.resolve(0); // } @@ -14,6 +14,6 @@ // async function foo() { // await Promise.resolve(0); // } -// function [|notAsync|]() { +// <|function [|notAsync|]() { // /*GOTO DEF*/await Promise.resolve(0); -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc index 4b6595b779..6e4f9e0904 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc @@ -1,12 +1,14 @@ // === goToDefinition === // === /goToDefinitionAwait3.ts === // class C { -// [|notAsync|]() { +// <|[|notAsync|]() { // /*GOTO DEF*/await Promise.resolve(0); -// } +// }|> // // async foo() { -// --- (line: 7) skipped --- +// await Promise.resolve(0); +// } +// } @@ -17,7 +19,7 @@ // await Promise.resolve(0); // } // -// async [|foo|]() { +// <|async [|foo|]() { // /*GOTO DEF*/await Promise.resolve(0); -// } +// }|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff deleted file mode 100644 index cc5c8ffd99..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait3.baseline.jsonc.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- old.goToDefinitionAwait3.baseline.jsonc -+++ new.goToDefinitionAwait3.baseline.jsonc -@@= skipped -5, +5 lines =@@ - // } - // - // async foo() { --// await Promise.resolve(0); --// } --// } -+// --- (line: 7) skipped --- - - diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc index 5976587ef6..2b54b79907 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionAwait4.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionAwait4.ts === // async function outerAsyncFun() { -// let [|af|] = async () => { +// let [|af|] = <|async () => { // /*GOTO DEF*/await Promise.resolve(0); -// } +// }|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc index 6bfffdb2f0..b3238a15d6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc @@ -1,9 +1,9 @@ // === goToDefinition === // === /types.ts === -// declare module [|"*.css"|] { +// <|declare module [|"*.css"|] { // const styles: any; // export = styles; -// } +// }|> // === /index.ts === // import styles from /*GOTO DEF*/[|"./index.css"|]; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff index 7f911baeda..9eae1385ea 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionCSSPatternAmbientModule.baseline.jsonc.diff @@ -6,5 +6,5 @@ -// [||]html { font-size: 16px; } - // === /types.ts === - // declare module [|"*.css"|] { + // <|declare module [|"*.css"|] { // const styles: any; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc index 834673ea3a..e59ac57fd0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc @@ -4,10 +4,10 @@ // [|constructor(protected readonly cArg: string) {}|] // } // -// export class [|Derived|] extends Base { +// <|export class [|Derived|] extends Base { // readonly email = this.cArg.getByLabel('Email') // readonly password = this.cArg.getByLabel('Password') -// } +// }|> // === /main.ts === // import { Derived } from './definitions' @@ -18,9 +18,9 @@ // === goToDefinition === // === /defInSameFile.ts === // import { Base } from './definitions' -// class [|SameFile|] extends Base { +// <|class [|SameFile|] extends Base { // readonly name: string = 'SameFile' -// } +// }|> // const SameFile = new /*GOTO DEF*/SameFile(cArg) // const wrapper = new Base(cArg) @@ -37,22 +37,24 @@ // === goToDefinition === // === /hasConstructor.ts === // import { Base } from './definitions' -// class [|HasConstructor|] extends Base { +// <|class [|HasConstructor|] extends Base { // [|constructor() {}|] // readonly name: string = ''; -// } +// }|> // const hasConstructor = new /*GOTO DEF*/HasConstructor(cArg) // === goToDefinition === // === /definitions.ts === -// export class [|Base|] { +// <|export class [|Base|] { // [|constructor(protected readonly cArg: string) {}|] -// } +// }|> // // export class Derived extends Base { -// --- (line: 6) skipped --- +// readonly email = this.cArg.getByLabel('Email') +// readonly password = this.cArg.getByLabel('Password') +// } // === /defInSameFile.ts === // import { Base } from './definitions' diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff deleted file mode 100644 index 7c68849da3..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassConstructors.baseline.jsonc.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.goToDefinitionClassConstructors.baseline.jsonc -+++ new.goToDefinitionClassConstructors.baseline.jsonc -@@= skipped -51, +51 lines =@@ - // } - // - // export class Derived extends Base { --// readonly email = this.cArg.getByLabel('Email') --// readonly password = this.cArg.getByLabel('Password') --// } -+// --- (line: 6) skipped --- - - // === /defInSameFile.ts === - // import { Base } from './definitions' \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff index af5f3287b1..4bed5c77c6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionClassStaticBlocks.baseline.jsonc.diff @@ -4,11 +4,11 @@ // === /goToDefinitionClassStaticBlocks.ts === // class ClassStaticBocks { // static x; --// /*GOTO DEF*/[|static|] {} +-// /*GOTO DEF*/<|[|static|] {}|> -// static y; --// [|static|] {} +-// <|[|static|] {}|> -// static y; --// [|static|] {} +-// <|[|static|] {}|> -// } - - @@ -17,11 +17,11 @@ -// === /goToDefinitionClassStaticBlocks.ts === -// class ClassStaticBocks { -// static x; --// [|static|] {} +-// <|[|static|] {}|> -// static y; --// /*GOTO DEF*/[|static|] {} +-// /*GOTO DEF*/<|[|static|] {}|> -// static y; --// [|static|] {} +-// <|[|static|] {}|> -// } - - @@ -30,11 +30,11 @@ -// === /goToDefinitionClassStaticBlocks.ts === -// class ClassStaticBocks { -// static x; --// [|static|] {} +-// <|[|static|] {}|> -// static y; --// [|static|] {} +-// <|[|static|] {}|> -// static y; --// /*GOTO DEF*/[|static|] {} +-// /*GOTO DEF*/<|[|static|] {}|> +// /*GOTO DEF*/static {} +// static y; +// static {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc index 1e7fb1043e..b25bd02906 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc @@ -1,13 +1,14 @@ // === goToDefinition === // === /goToDefinitionConstructorOfClassExpression01.ts === -// var x = class [|C|] { +// var x = <|class [|C|] { // [|constructor() { // var other = new /*GOTO DEF*/C; // }|] -// } +// }|> // // var y = class C extends x { -// --- (line: 8) skipped --- +// constructor() { +// --- (line: 9) skipped --- @@ -17,15 +18,16 @@ // } // } // -// var y = class [|C|] extends x { +// var y = <|class [|C|] extends x { // [|constructor() { // super(); // var other = new /*GOTO DEF*/C; // }|] -// } +// }|> // var z = class C extends x { // m() { -// --- (line: 15) skipped --- +// return new C; +// --- (line: 16) skipped --- @@ -43,13 +45,16 @@ // var other = new C; // } // } -// var z = class [|C|] extends x { +// var z = <|class [|C|] extends x { // m() { // return new /*GOTO DEF*/C; // } -// } +// }|> // -// --- (line: 19) skipped --- +// var x1 = new C(); +// var x2 = new x(); +// var y1 = new y(); +// var z1 = new z(); @@ -68,14 +73,15 @@ // === goToDefinition === // === /goToDefinitionConstructorOfClassExpression01.ts === -// var [|x|] = class C { +// <|var [|x|] = class C { // [|constructor() { // var other = new C; // }|] -// } +// }|> // // var y = class C extends x { -// --- (line: 8) skipped --- +// constructor() { +// --- (line: 9) skipped --- // --- (line: 16) skipped --- // } @@ -93,12 +99,12 @@ // } // } // -// var [|y|] = class C extends x { +// <|var [|y|] = class C extends x { // [|constructor() { // super(); // var other = new C; // }|] -// } +// }|> // var z = class C extends x { // m() { // return new C; @@ -126,11 +132,11 @@ // var other = new C; // } // } -// var [|z|] = class C extends x { +// <|var [|z|] = class C extends x { // m() { // return new C; // } -// } +// }|> // // var x1 = new C(); // var x2 = new x(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff deleted file mode 100644 index 310e9a478f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassExpression01.baseline.jsonc.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- old.goToDefinitionConstructorOfClassExpression01.baseline.jsonc -+++ new.goToDefinitionConstructorOfClassExpression01.baseline.jsonc -@@= skipped -6, +6 lines =@@ - // } - // - // var y = class C extends x { --// constructor() { --// --- (line: 9) skipped --- -+// --- (line: 8) skipped --- - - - -@@= skipped -19, +18 lines =@@ - // } - // var z = class C extends x { - // m() { --// return new C; --// --- (line: 16) skipped --- -+// --- (line: 15) skipped --- - - - -@@= skipped -25, +24 lines =@@ - // } - // } - // --// var x1 = new C(); --// var x2 = new x(); --// var y1 = new y(); --// var z1 = new z(); -+// --- (line: 19) skipped --- - - - -@@= skipped -29, +26 lines =@@ - // } - // - // var y = class C extends x { --// constructor() { --// --- (line: 9) skipped --- -+// --- (line: 8) skipped --- - - // --- (line: 16) skipped --- - // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc index a8830b8eaa..36107b2bda 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc @@ -1,12 +1,12 @@ // === goToDefinition === // === /goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.ts === -// namespace [|Foo|] { +// <|namespace [|Foo|] { // export var x; -// } +// }|> // -// class [|Foo|] { +// <|class [|Foo|] { // [|constructor() { // }|] -// } +// }|> // // var x = new /*GOTO DEF*/Foo(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff index 121dbc9a89..198b345ed3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.baseline.jsonc.diff @@ -4,7 +4,10 @@ // === goToDefinition === // === /goToDefinitionConstructorOfClassWhenClassIsPrecededByNamespace01.ts === -// namespace Foo { -+// namespace [|Foo|] { ++// <|namespace [|Foo|] { // export var x; - // } - // \ No newline at end of file +-// } ++// }|> + // + // <|class [|Foo|] { + // [|constructor() { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc index 4ec3dcce60..593b06c742 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionConstructorOverloads.baseline.jsonc @@ -1,10 +1,10 @@ // === goToDefinition === // === /goToDefinitionConstructorOverloads.ts === -// class [|ConstructorOverload|] { +// <|class [|ConstructorOverload|] { // [|constructor();|] // constructor(foo: string); // constructor(foo: any) { } -// } +// }|> // // var constructorOverload = new /*GOTO DEF*/ConstructorOverload(); // var constructorOverload = new ConstructorOverload("foo"); @@ -16,11 +16,11 @@ // === goToDefinition === // === /goToDefinitionConstructorOverloads.ts === -// class [|ConstructorOverload|] { +// <|class [|ConstructorOverload|] { // constructor(); // [|constructor(foo: string);|] // constructor(foo: any) { } -// } +// }|> // // var constructorOverload = new ConstructorOverload(); // var constructorOverload = new /*GOTO DEF*/ConstructorOverload("foo"); @@ -55,9 +55,9 @@ // var constructorOverload = new ConstructorOverload(); // var constructorOverload = new ConstructorOverload("foo"); // -// class [|Extended|] extends ConstructorOverload { +// <|class [|Extended|] extends ConstructorOverload { // readonly name = "extended"; -// } +// }|> // var extended1 = new /*GOTO DEF*/Extended(); // var extended2 = new Extended("foo"); @@ -74,8 +74,8 @@ // var constructorOverload = new ConstructorOverload(); // var constructorOverload = new ConstructorOverload("foo"); // -// class [|Extended|] extends ConstructorOverload { +// <|class [|Extended|] extends ConstructorOverload { // readonly name = "extended"; -// } +// }|> // var extended1 = new Extended(); // var extended2 = new /*GOTO DEF*/Extended("foo"); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc index 6c6c9dcbb0..12b4fd0809 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecorator.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.ts === -// function [|decorator|](target) { +// <|function [|decorator|](target) { // return target; -// } +// }|> // function decoratorFactory(...args) { // return target => target; // } @@ -21,9 +21,9 @@ // function decorator(target) { // return target; // } -// function [|decoratorFactory|](...args) { +// <|function [|decoratorFactory|](...args) { // return target => target; -// } +// }|> // === /b.ts === // @decorator diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc index f3f2413078..4195b9aa40 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDecoratorOverloads.baseline.jsonc @@ -2,7 +2,7 @@ // === /goToDefinitionDecoratorOverloads.ts === // async function f() {} // -// function [|dec|](target: any, propertyKey: string): void; +// <|function [|dec|](target: any, propertyKey: string): void;|> // function dec(target: any, propertyKey: symbol): void; // function dec(target: any, propertyKey: string | symbol) {} // @@ -19,7 +19,7 @@ // async function f() {} // // function dec(target: any, propertyKey: string): void; -// function [|dec|](target: any, propertyKey: symbol): void; +// <|function [|dec|](target: any, propertyKey: symbol): void;|> // function dec(target: any, propertyKey: string | symbol) {} // // declare const s: symbol; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff index ced54446a8..8ab4eee42b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire1.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /util.js === --// class [|Util|] {} +-// <|class [|Util|] {}|> -// module.exports = { Util }; +// class Util {} +// module.exports = { [|Util|] }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff index 45ab8715af..9db51a1e6e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDestructuredRequire2.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === -// === /util.js === --// class [|Util|] {} +-// <|class [|Util|] {}|> -// module.exports = { Util }; +// === /reexport.js === +// const { Util } = require('./util'); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc index 8bb9b0bdb2..254bf43336 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFile.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionDifferentFile_Definition.ts === -// var [|remoteVariable|]; +// <|var [|remoteVariable|];|> // function remoteFunction() { } // class remoteClass { } // interface remoteInterface{ } @@ -18,7 +18,7 @@ // === goToDefinition === // === /goToDefinitionDifferentFile_Definition.ts === // var remoteVariable; -// function [|remoteFunction|]() { } +// <|function [|remoteFunction|]() { }|> // class remoteClass { } // interface remoteInterface{ } // module remoteModule{ export var foo = 1;} @@ -36,7 +36,7 @@ // === /goToDefinitionDifferentFile_Definition.ts === // var remoteVariable; // function remoteFunction() { } -// class [|remoteClass|] { } +// <|class [|remoteClass|] { }|> // interface remoteInterface{ } // module remoteModule{ export var foo = 1;} @@ -54,7 +54,7 @@ // var remoteVariable; // function remoteFunction() { } // class remoteClass { } -// interface [|remoteInterface|]{ } +// <|interface [|remoteInterface|]{ }|> // module remoteModule{ export var foo = 1;} // === /goToDefinitionDifferentFile_Consumption.ts === @@ -72,7 +72,7 @@ // function remoteFunction() { } // class remoteClass { } // interface remoteInterface{ } -// module [|remoteModule|]{ export var foo = 1;} +// <|module [|remoteModule|]{ export var foo = 1;}|> // === /goToDefinitionDifferentFile_Consumption.ts === // remoteVariable = 1; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc index 4a1334801b..6d28006c21 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDifferentFileIndirectly.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /Remote2.ts === -// var [|rem2Var|]; +// <|var [|rem2Var|];|> // function rem2Fn() { } // class rem2Cls { } // interface rem2Int{} @@ -18,7 +18,7 @@ // === goToDefinition === // === /Remote2.ts === // var rem2Var; -// function [|rem2Fn|]() { } +// <|function [|rem2Fn|]() { }|> // class rem2Cls { } // interface rem2Int{} // module rem2Mod { export var foo; } @@ -36,7 +36,7 @@ // === /Remote2.ts === // var rem2Var; // function rem2Fn() { } -// class [|rem2Cls|] { } +// <|class [|rem2Cls|] { }|> // interface rem2Int{} // module rem2Mod { export var foo; } @@ -54,7 +54,7 @@ // var rem2Var; // function rem2Fn() { } // class rem2Cls { } -// interface [|rem2Int|]{} +// <|interface [|rem2Int|]{}|> // module rem2Mod { export var foo; } // === /Definition.ts === @@ -72,7 +72,7 @@ // function rem2Fn() { } // class rem2Cls { } // interface rem2Int{} -// module [|rem2Mod|] { export var foo; } +// <|module [|rem2Mod|] { export var foo; }|> // === /Definition.ts === // rem2Var = 1; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc index bf6e1646d3..a6a8fc72e0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport2.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /foo.ts === -// export function [|bar|]() { return "bar"; } +// <|export function [|bar|]() { return "bar"; }|> // var x = import("./foo"); // x.then(foo => { // foo.b/*GOTO DEF*/ar(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc index 80f46261ba..1a3de57b7b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc @@ -1,4 +1,4 @@ // === goToDefinition === // === /foo.ts === // export function bar() { return "bar"; } -// import('./foo').then(({ [|ba/*GOTO DEF*/r|] }) => undefined); \ No newline at end of file +// import('./foo').then((<|{ [|ba/*GOTO DEF*/r|] }|>) => undefined); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff index 0bce50da1f..475a194f8d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport3.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.ts === --// export function [|bar|]() { return "bar"; } +-// <|export function [|bar|]() { return "bar"; }|> -// import('./foo').then(({ ba/*GOTO DEF*/r }) => undefined); +// export function bar() { return "bar"; } -+// import('./foo').then(({ [|ba/*GOTO DEF*/r|] }) => undefined); \ No newline at end of file ++// import('./foo').then((<|{ [|ba/*GOTO DEF*/r|] }|>) => undefined); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc index 80f46261ba..1a3de57b7b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc @@ -1,4 +1,4 @@ // === goToDefinition === // === /foo.ts === // export function bar() { return "bar"; } -// import('./foo').then(({ [|ba/*GOTO DEF*/r|] }) => undefined); \ No newline at end of file +// import('./foo').then((<|{ [|ba/*GOTO DEF*/r|] }|>) => undefined); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff index 2b4cd919e3..2756710c30 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionDynamicImport4.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.ts === --// export function [|bar|]() { return "bar"; } +-// <|export function [|bar|]() { return "bar"; }|> -// import('./foo').then(({ ba/*GOTO DEF*/r }) => undefined); +// export function bar() { return "bar"; } -+// import('./foo').then(({ [|ba/*GOTO DEF*/r|] }) => undefined); \ No newline at end of file ++// import('./foo').then((<|{ [|ba/*GOTO DEF*/r|] }|>) => undefined); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc index 4932b11ced..4924c08374 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc @@ -2,7 +2,7 @@ // === /index.js === // const Core = {} // -// Core.[|Test|] = class { } +// <|Core.[|Test|] = class { }|> // // Core.Test.prototype.foo = 10 // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff new file mode 100644 index 0000000000..0a9d17f6e6 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass1.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionExpandoClass1.baseline.jsonc ++++ new.goToDefinitionExpandoClass1.baseline.jsonc +@@= skipped -1, +1 lines =@@ + // === /index.js === + // const Core = {} + // +-// <|Core.[|Test|]|> = class { } ++// <|Core.[|Test|] = class { }|> + // + // Core.Test.prototype.foo = 10 + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc index aea5b85d31..1f180ac14c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc @@ -2,9 +2,9 @@ // === /index.js === // const Core = {} // -// Core.[|Test|] = class { +// <|Core.[|Test|] = class { // [|constructor() { }|] -// } +// }|> // // Core.Test.prototype.foo = 10 // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff new file mode 100644 index 0000000000..b3faaad3c7 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoClass2.baseline.jsonc.diff @@ -0,0 +1,14 @@ +--- old.goToDefinitionExpandoClass2.baseline.jsonc ++++ new.goToDefinitionExpandoClass2.baseline.jsonc +@@= skipped -1, +1 lines =@@ + // === /index.js === + // const Core = {} + // +-// <|Core.[|Test|]|> = class { ++// <|Core.[|Test|] = class { + // [|constructor() { }|] +-// } ++// }|> + // + // Core.Test.prototype.foo = 10 + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc index d4ecb56a09..757b38479d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /goToDefinitionExpandoElementAccess.ts === // function f() {} -// f[[|"x"|]] = 0; -// f[/*GOTO DEF*/[|"x"|]] = 1; \ No newline at end of file +// <|f[[|"x"|]] = 0;|> +// <|f[/*GOTO DEF*/[|"x"|]] = 1;|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff new file mode 100644 index 0000000000..991491559d --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExpandoElementAccess.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionExpandoElementAccess.baseline.jsonc ++++ new.goToDefinitionExpandoElementAccess.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionExpandoElementAccess.ts === + // function f() {} +-// <|f[[|"x"|]]|> = 0; +-// <|f[/*GOTO DEF*/[|"x"|]]|> = 1; ++// <|f[[|"x"|]] = 0;|> ++// <|f[/*GOTO DEF*/[|"x"|]] = 1;|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc index 7ef08db995..67566917c3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName3.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.ts === -// declare module [|"e"|] { +// <|declare module [|"e"|] { // class Foo { } -// } +// }|> // === /b.ts === // import n = require([|'e/*GOTO DEF*/'|]); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc index a9336821ec..a85e69b18d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName5.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /a.ts === -// declare module [|"external/*GOTO DEF*/"|] { +// <|declare module [|"external/*GOTO DEF*/"|] { // class Foo { } -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc index c5e63ec29c..ec87bf404b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName6.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.ts === -// declare module [|"e"|] { +// <|declare module [|"e"|] { // class Foo { } -// } +// }|> // === /b.ts === // import * from [|'e/*GOTO DEF*/'|]; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc index 219047b3f8..b399737753 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName7.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.ts === -// declare module [|"e"|] { +// <|declare module [|"e"|] { // class Foo { } -// } +// }|> // === /b.ts === // import {Foo, Bar} from [|'e/*GOTO DEF*/'|]; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc index b4a146031d..725a995aa0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName8.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.ts === -// declare module [|"e"|] { +// <|declare module [|"e"|] { // class Foo { } -// } +// }|> // === /b.ts === // export {Foo, Bar} from [|'e/*GOTO DEF*/'|]; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc index 859742edf3..298dbbd949 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionExternalModuleName9.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.ts === -// declare module [|"e"|] { +// <|declare module [|"e"|] { // class Foo { } -// } +// }|> // === /b.ts === // export * from [|'e/*GOTO DEF*/'|]; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc index d7038b1f61..a52c8362f6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionFunctionOverloads.ts === -// function [|functionOverload|](value: number); +// <|function [|functionOverload|](value: number);|> // function functionOverload(value: string); // function functionOverload() {} // @@ -13,7 +13,7 @@ // === goToDefinition === // === /goToDefinitionFunctionOverloads.ts === // function functionOverload(value: number); -// function [|functionOverload|](value: string); +// <|function [|functionOverload|](value: string);|> // function functionOverload() {} // // functionOverload(123); @@ -24,7 +24,7 @@ // === goToDefinition === // === /goToDefinitionFunctionOverloads.ts === -// function [|functionOverload|](value: number); +// <|function [|functionOverload|](value: number);|> // function functionOverload(value: string); // function functionOverload() {} // @@ -36,9 +36,9 @@ // === goToDefinition === // === /goToDefinitionFunctionOverloads.ts === -// function /*GOTO DEF*/[|functionOverload|](value: number); -// function [|functionOverload|](value: string); -// function [|functionOverload|]() {} +// <|function /*GOTO DEF*/[|functionOverload|](value: number);|> +// <|function [|functionOverload|](value: string);|> +// <|function [|functionOverload|]() {}|> // // functionOverload(123); // functionOverload("123"); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff index 738bb5d4e6..36dc64d1ca 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloads.baseline.jsonc.diff @@ -6,8 +6,8 @@ // === /goToDefinitionFunctionOverloads.ts === -// function /*GOTO DEF*/functionOverload(value: number); -// function functionOverload(value: string); -+// function /*GOTO DEF*/[|functionOverload|](value: number); -+// function [|functionOverload|](value: string); - // function [|functionOverload|]() {} ++// <|function /*GOTO DEF*/[|functionOverload|](value: number);|> ++// <|function [|functionOverload|](value: string);|> + // <|function [|functionOverload|]() {}|> // // functionOverload(123); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc index ea77c70996..f84a24a235 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc @@ -1,9 +1,9 @@ // === goToDefinition === // === /goToDefinitionFunctionOverloadsInClass.ts === // class clsInOverload { -// static [|fnOverload|](); -// static /*GOTO DEF*/[|fnOverload|](foo: string); -// static [|fnOverload|](foo: any) { } +// <|static [|fnOverload|]();|> +// <|static /*GOTO DEF*/[|fnOverload|](foo: string);|> +// <|static [|fnOverload|](foo: any) { }|> // public fnOverload(): any; // public fnOverload(foo: string); // public fnOverload(foo: any) { return "foo" } @@ -17,9 +17,9 @@ // static fnOverload(); // static fnOverload(foo: string); // static fnOverload(foo: any) { } -// public /*GOTO DEF*/[|fnOverload|](): any; -// public [|fnOverload|](foo: string); -// public [|fnOverload|](foo: any) { return "foo" } +// <|public /*GOTO DEF*/[|fnOverload|](): any;|> +// <|public [|fnOverload|](foo: string);|> +// <|public [|fnOverload|](foo: any) { return "foo" }|> // // constructor() { } // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff index da5b22c4df..2d4bc77fe9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionOverloadsInClass.baseline.jsonc.diff @@ -6,9 +6,9 @@ // class clsInOverload { -// static fnOverload(); -// static /*GOTO DEF*/fnOverload(foo: string); -+// static [|fnOverload|](); -+// static /*GOTO DEF*/[|fnOverload|](foo: string); - // static [|fnOverload|](foo: any) { } ++// <|static [|fnOverload|]();|> ++// <|static /*GOTO DEF*/[|fnOverload|](foo: string);|> + // <|static [|fnOverload|](foo: any) { }|> // public fnOverload(): any; // public fnOverload(foo: string); @@= skipped -16, +16 lines =@@ @@ -17,8 +17,8 @@ // static fnOverload(foo: any) { } -// public /*GOTO DEF*/fnOverload(): any; -// public fnOverload(foo: string); -+// public /*GOTO DEF*/[|fnOverload|](): any; -+// public [|fnOverload|](foo: string); - // public [|fnOverload|](foo: any) { return "foo" } ++// <|public /*GOTO DEF*/[|fnOverload|](): any;|> ++// <|public [|fnOverload|](foo: string);|> + // <|public [|fnOverload|](foo: any) { return "foo" }|> // // constructor() { } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc index 54ecba10e0..cfaefffe74 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionFunctionType.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionFunctionType.ts === -// const [|c|]: () => void; +// <|const [|c|]: () => void;|> // /*GOTO DEF*/c(); // function test(cb: () => void) { // cb(); @@ -13,7 +13,7 @@ // === /goToDefinitionFunctionType.ts === // const c: () => void; // c(); -// function test([|cb|]: () => void) { +// function test(<|[|cb|]: () => void|>) { // /*GOTO DEF*/cb(); // } // class C { @@ -28,7 +28,7 @@ // cb(); // } // class C { -// [|prop|]: () => void; +// <|[|prop|]: () => void;|> // m() { // this./*GOTO DEF*/prop(); // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc index 87e205beb0..ab54106bb2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImplicitConstructor.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /goToDefinitionImplicitConstructor.ts === -// class [|ImplicitConstructor|] { -// } +// <|class [|ImplicitConstructor|] { +// }|> // var implicitConstructor = new /*GOTO DEF*/ImplicitConstructor(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc index 3d35b62e8c..84ea05b9c4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames.baseline.jsonc @@ -2,9 +2,9 @@ // === /a.ts === // export module Module { // } -// export class [|Class|] { +// <|export class [|Class|] { // private f; -// } +// }|> // export interface Interface { // x; // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc index 2ff5f7768e..dc1b4bddad 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc @@ -3,7 +3,7 @@ // class Class { // f; // } -// module.exports.[|Class|] = Class; +// <|module.exports.[|Class|] = Class|>; // === /b.js === // const { Class } = require("./a"); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff index 58e4e82e9b..c02768f067 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames10.baseline.jsonc.diff @@ -3,14 +3,14 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /a.js === --// class [|Class|] { +-// <|class [|Class|] { -// f; --// } +-// }|> -// module.exports.Class = Class; +// class Class { +// f; +// } -+// module.exports.[|Class|] = Class; ++// <|module.exports.[|Class|] = Class|>; // === /b.js === // const { Class } = require("./a"); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff index 6c9473c207..b5aae22c14 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames11.baseline.jsonc.diff @@ -3,9 +3,9 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /a.js === --// class [|Class|] { +-// <|class [|Class|] { -// f; --// } +-// }|> -// module.exports = { Class }; +// class Class { +// f; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc index 598809ef9a..afebefdd92 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames2.baseline.jsonc @@ -2,9 +2,9 @@ // === /a.ts === // export module Module { // } -// export class [|Class|] { +// <|export class [|Class|] { // private f; -// } +// }|> // export interface Interface { // x; // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc index fd51a82e05..f2055ab948 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames3.baseline.jsonc @@ -2,9 +2,9 @@ // === /a.ts === // export module Module { // } -// export class [|Class|] { +// <|export class [|Class|] { // private f; -// } +// }|> // export interface Interface { // x; // } @@ -19,9 +19,9 @@ // === /a.ts === // export module Module { // } -// export class [|Class|] { +// <|export class [|Class|] { // private f; -// } +// }|> // export interface Interface { // x; // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc index c1b316c27e..eec135b8e0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames4.baseline.jsonc @@ -2,9 +2,9 @@ // === /a.ts === // export module Module { // } -// export class [|Class|] { +// <|export class [|Class|] { // private f; -// } +// }|> // export interface Interface { // x; // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc index a104f69fec..2a39c9fd21 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames5.baseline.jsonc @@ -2,9 +2,9 @@ // === /a.ts === // export module Module { // } -// export class [|Class|] { +// <|export class [|Class|] { // private f; -// } +// }|> // export interface Interface { // x; // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc index 1772549793..27613f361f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames7.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.ts === -// class [|Class|] { +// <|class [|Class|] { // private f; -// } +// }|> // export default Class; // === /b.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc index ac1d675989..de0b15a621 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames8.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.js === -// class [|Class|] { +// <|class [|Class|] { // private f; -// } +// }|> // export { Class }; // === /b.js === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc index b34785b6e5..2103d84d2d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImportedNames9.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /a.js === -// class [|Class|] { +// <|class [|Class|] { // f; -// } +// }|> // export { Class }; // === /b.js === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc index 37a47b3834..ecc6cd88d5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc @@ -16,7 +16,7 @@ // === goToDefinition === // === /a.ts === -// export default function [|f|]() {} +// <|export default function [|f|]() {}|> // export const x = 0; // === /b.ts === @@ -33,7 +33,7 @@ // === goToDefinition === // === /a.ts === // export default function f() {} -// export const [|x|] = 0; +// <|export const [|x|] = 0;|> // === /b.ts === // import f, { x } from "./a"; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff index 8ffc255d3e..c41bf76aed 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionImports.baseline.jsonc.diff @@ -8,7 +8,7 @@ + // === /b.ts === // import f, { x } from "./a"; --// import * as [|a|] from "./a"; +-// <|import * as [|a|] from "./a";|> +// import * as a from "./a"; // import b = require("./b"); // f; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc index a23ea590eb..700cb243f2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInMemberDeclaration.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === -// interface [|IFoo|] { method1(): number; } +// <|interface [|IFoo|] { method1(): number; }|> // // class Foo implements IFoo { // public method1(): number { return 0; } @@ -19,7 +19,7 @@ // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === -// interface [|IFoo|] { method1(): number; } +// <|interface [|IFoo|] { method1(): number; }|> // // class Foo implements IFoo { // public method1(): number { return 0; } @@ -39,7 +39,7 @@ // === goToDefinition === // === /goToDefinitionInMemberDeclaration.ts === -// interface [|IFoo|] { method1(): number; } +// <|interface [|IFoo|] { method1(): number; }|> // // class Foo implements IFoo { // public method1(): number { return 0; } @@ -59,9 +59,9 @@ // === /goToDefinitionInMemberDeclaration.ts === // interface IFoo { method1(): number; } // -// class [|Foo|] implements IFoo { +// <|class [|Foo|] implements IFoo { // public method1(): number { return 0; } -// } +// }|> // // enum Enum { value1, value2 }; // @@ -79,9 +79,9 @@ // === /goToDefinitionInMemberDeclaration.ts === // interface IFoo { method1(): number; } // -// class [|Foo|] implements IFoo { +// <|class [|Foo|] implements IFoo { // public method1(): number { return 0; } -// } +// }|> // // enum Enum { value1, value2 }; // @@ -100,7 +100,7 @@ // public method1(): number { return 0; } // } // -// enum [|Enum|] { value1, value2 }; +// <|enum [|Enum|] { value1, value2 }|>; // // class Bar { // public _interface: IFoo = new Foo(); @@ -121,7 +121,7 @@ // public method1(): number { return 0; } // } // -// enum [|Enum|] { value1, value2 }; +// <|enum [|Enum|] { value1, value2 }|>; // // class Bar { // public _interface: IFoo = new Foo(); @@ -142,7 +142,7 @@ // // enum Enum { value1, value2 }; // -// class [|Bar|] { +// <|class [|Bar|] { // public _interface: IFoo = new Foo(); // public _class: Foo = new Foo(); // public _list: IFoo[]=[]; @@ -151,4 +151,4 @@ // // constructor(public _inConstructor: IFoo) { // } -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc index db5eff1b7a..2f4cd559b8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInTypeArgument.baseline.jsonc @@ -2,7 +2,7 @@ // === /goToDefinitionInTypeArgument.ts === // class Foo { } // -// class [|Bar|] { } +// <|class [|Bar|] { }|> // // var x = new Foo(); @@ -10,7 +10,7 @@ // === goToDefinition === // === /goToDefinitionInTypeArgument.ts === -// class [|Foo|] { } +// <|class [|Foo|] { }|> // // class Bar { } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc index 1dfebe238c..67cf0b94d0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof1.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionInstanceof1.ts === -// class [|C|] { -// } +// <|class [|C|] { +// }|> // declare var obj: any; // obj /*GOTO DEF*/instanceof C; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc index 899d642468..ce7f24d137 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInstanceof2.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /main.ts === // class C { -// static [|[Symbol.hasInstance]|](value: unknown): boolean { return true; } +// <|static [|[Symbol.hasInstance]|](value: unknown): boolean { return true; }|> // } // declare var obj: any; // obj /*GOTO DEF*/instanceof C; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc index 9e4567449e..f42506590e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionInterfaceAfterImplement.baseline.jsonc @@ -1,9 +1,9 @@ // === goToDefinition === // === /goToDefinitionInterfaceAfterImplement.ts === -// interface [|sInt|] { +// <|interface [|sInt|] { // sVar: number; // sFn: () => void; -// } +// }|> // // class iClass implements /*GOTO DEF*/sInt { // public sVar = 1; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc index 2f56e33af2..c814c852e5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag4.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /b.ts === -// export interface [|A|] { } +// <|export interface [|A|] { }|> // === /a.js === // /** diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc index 87c23cd752..e80e6bd929 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsDocImportTag5.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /b.ts === -// export interface [|A|] { } +// <|export interface [|A|] { }|> // === /a.js === // /** diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff index 89135406a0..9b1fadeaf6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsModuleExports.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.js === --// x.[|test|] = () => { } +-// x.[|test|] = <|() => { }|> +// x.test = () => { } // x./*GOTO DEF*/test(); // x.test3 = function () { } @@ -12,6 +12,6 @@ // === /foo.js === // x.test = () => { } // x.test(); --// x.[|test3|] = function () { } +-// x.[|test3|] = <|function () { }|> +// x.test3 = function () { } // x./*GOTO DEF*/test3(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc index 620243c5d1..24ee3539c6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc @@ -4,5 +4,5 @@ // [|(props: P, context?: any): string;|] // } // -// const [|Thing|]: FC = (props) =>
; +// <|const [|Thing|]: FC = (props) =>
;|> // const HelloWorld = () => ; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff index f7d634d7c6..2d590bb903 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxCall.baseline.jsonc.diff @@ -8,7 +8,7 @@ +// [|(props: P, context?: any): string;|] // } // - // const [|Thing|]: FC = (props) =>
; + // <|const [|Thing|]: FC = (props) =>
;|> -// const HelloWorld = () => ; - -// === /./test.tsx === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc index a5e3eb6877..1bfa8197b8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /foo.jsx === -// const [|Foo|] = () => ( +// <|const [|Foo|] = () => ( //
foo
-// ); +// );|> // export default Foo; // === /bar.jsx === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff new file mode 100644 index 0000000000..020200c54a --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionJsxNotSet.baseline.jsonc.diff @@ -0,0 +1,13 @@ +--- old.goToDefinitionJsxNotSet.baseline.jsonc ++++ new.goToDefinitionJsxNotSet.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /foo.jsx === +-// const [|Foo|] = <|() => ( ++// <|const [|Foo|] = () => ( + //
foo
+-// )|>; ++// );|> + // export default Foo; + + // === /bar.jsx === \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc index 73c5325d09..ac35de17f8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMember.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /a.ts === // class A { -// private [|z|]/*GOTO DEF*/: string; +// <|private [|z|]/*GOTO DEF*/: string;|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc index a148da853a..ee14ee77c3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMetaProperty.baseline.jsonc @@ -22,7 +22,7 @@ // === goToDefinition === // === /a.ts === // import.meta; -// function [|f|]() { new.t/*GOTO DEF*/arget; } +// <|function [|f|]() { new.t/*GOTO DEF*/arget; }|> @@ -43,4 +43,4 @@ // === goToDefinition === // === /b.ts === // import.m; -// class [|c|] { constructor() { new.t/*GOTO DEF*/arget; } } \ No newline at end of file +// <|class [|c|] { constructor() { new.t/*GOTO DEF*/arget; } }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc index 8e9000452d..cdd4d85d88 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionMethodOverloads.ts === // class MethodOverload { -// static [|method|](); +// <|static [|method|]();|> // static method(foo: string); // static method(foo?: any) { } // public method(): any; @@ -22,7 +22,7 @@ // === /goToDefinitionMethodOverloads.ts === // class MethodOverload { // static method(); -// static [|method|](foo: string); +// <|static [|method|](foo: string);|> // static method(foo?: any) { } // public method(): any; // public method(foo: string); @@ -44,7 +44,7 @@ // static method(); // static method(foo: string); // static method(foo?: any) { } -// public [|method|](): any; +// <|public [|method|](): any;|> // public method(foo: string); // public method(foo?: any) { return "foo" } // } @@ -65,7 +65,7 @@ // static method(foo: string); // static method(foo?: any) { } // public method(): any; -// public [|method|](foo: string); +// <|public [|method|](foo: string);|> // public method(foo?: any) { return "foo" } // } // // static method @@ -81,9 +81,9 @@ // === goToDefinition === // === /goToDefinitionMethodOverloads.ts === // class MethodOverload { -// static /*GOTO DEF*/[|method|](); -// static [|method|](foo: string); -// static [|method|](foo?: any) { } +// <|static /*GOTO DEF*/[|method|]();|> +// <|static [|method|](foo: string);|> +// <|static [|method|](foo?: any) { }|> // public method(): any; // public method(foo: string); // public method(foo?: any) { return "foo" } @@ -97,9 +97,9 @@ // static method(); // static method(foo: string); // static method(foo?: any) { } -// public /*GOTO DEF*/[|method|](): any; -// public [|method|](foo: string); -// public [|method|](foo?: any) { return "foo" } +// <|public /*GOTO DEF*/[|method|](): any;|> +// <|public [|method|](foo: string);|> +// <|public [|method|](foo?: any) { return "foo" }|> // } // // static method // MethodOverload.method(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff index c7e6e8bfe3..928072e6a3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMethodOverloads.baseline.jsonc.diff @@ -6,9 +6,9 @@ // class MethodOverload { -// static /*GOTO DEF*/method(); -// static method(foo: string); -+// static /*GOTO DEF*/[|method|](); -+// static [|method|](foo: string); - // static [|method|](foo?: any) { } ++// <|static /*GOTO DEF*/[|method|]();|> ++// <|static [|method|](foo: string);|> + // <|static [|method|](foo?: any) { }|> // public method(): any; // public method(foo: string); @@= skipped -16, +16 lines =@@ @@ -17,8 +17,8 @@ // static method(foo?: any) { } -// public /*GOTO DEF*/method(): any; -// public method(foo: string); -+// public /*GOTO DEF*/[|method|](): any; -+// public [|method|](foo: string); - // public [|method|](foo?: any) { return "foo" } ++// <|public /*GOTO DEF*/[|method|](): any;|> ++// <|public [|method|](foo: string);|> + // <|public [|method|](foo?: any) { return "foo" }|> // } // // static method \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc index ca3234f881..5bcb240699 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc @@ -1,20 +1,38 @@ // === goToDefinition === // === /a.ts === -// /*GOTO DEF*/export class [|A|] { +// /*GOTO DEF*/<|export class [|A|] { // // private z: string; // -// --- (line: 5) skipped --- +// readonly x: string; +// +// async a() { } +// +// override b() {} +// +// public async c() { } +// }|> +// +// export function foo() { } // === goToDefinition === // === /a.ts === -// export class [|A|]/*GOTO DEF*/ { +// <|export class [|A|]/*GOTO DEF*/ { // // private z: string; // -// --- (line: 5) skipped --- +// readonly x: string; +// +// async a() { } +// +// override b() {} +// +// public async c() { } +// }|> +// +// export function foo() { } @@ -22,7 +40,7 @@ // === /a.ts === // export class A { // -// /*GOTO DEF*/private [|z|]: string; +// /*GOTO DEF*/<|private [|z|]: string;|> // // readonly x: string; // @@ -34,7 +52,7 @@ // === /a.ts === // export class A { // -// private [|z|]/*GOTO DEF*/: string; +// <|private [|z|]/*GOTO DEF*/: string;|> // // readonly x: string; // @@ -48,7 +66,7 @@ // // private z: string; // -// /*GOTO DEF*/readonly [|x|]: string; +// /*GOTO DEF*/<|readonly [|x|]: string;|> // // async a() { } // @@ -62,7 +80,7 @@ // // private z: string; // -// readonly [|x|]/*GOTO DEF*/: string; +// <|readonly [|x|]/*GOTO DEF*/: string;|> // // async a() { } // @@ -76,7 +94,7 @@ // // readonly x: string; // -// /*GOTO DEF*/async [|a|]() { } +// /*GOTO DEF*/<|async [|a|]() { }|> // // override b() {} // @@ -90,7 +108,7 @@ // // readonly x: string; // -// async [|a|]/*GOTO DEF*/() { } +// <|async [|a|]/*GOTO DEF*/() { }|> // // override b() {} // @@ -104,7 +122,7 @@ // // async a() { } // -// /*GOTO DEF*/override [|b|]() {} +// /*GOTO DEF*/<|override [|b|]() {}|> // // public async c() { } // } @@ -119,7 +137,7 @@ // // async a() { } // -// override [|b|]/*GOTO DEF*/() {} +// <|override [|b|]/*GOTO DEF*/() {}|> // // public async c() { } // } @@ -134,7 +152,7 @@ // // override b() {} // -// /*GOTO DEF*/public async [|c|]() { } +// /*GOTO DEF*/<|public async [|c|]() { }|> // } // // export function foo() { } @@ -147,7 +165,7 @@ // // override b() {} // -// public/*GOTO DEF*/ async [|c|]() { } +// <|public/*GOTO DEF*/ async [|c|]() { }|> // } // // export function foo() { } @@ -160,7 +178,7 @@ // // override b() {} // -// public as/*GOTO DEF*/ync [|c|]() { } +// <|public as/*GOTO DEF*/ync [|c|]() { }|> // } // // export function foo() { } @@ -173,7 +191,7 @@ // // override b() {} // -// public async [|c|]/*GOTO DEF*/() { } +// <|public async [|c|]/*GOTO DEF*/() { }|> // } // // export function foo() { } @@ -186,7 +204,7 @@ // public async c() { } // } // -// exp/*GOTO DEF*/ort function [|foo|]() { } +// <|exp/*GOTO DEF*/ort function [|foo|]() { }|> @@ -196,4 +214,4 @@ // public async c() { } // } // -// export function [|foo|]/*GOTO DEF*/() { } \ No newline at end of file +// <|export function [|foo|]/*GOTO DEF*/() { }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff deleted file mode 100644 index ca26184597..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionModifiers.baseline.jsonc.diff +++ /dev/null @@ -1,37 +0,0 @@ ---- old.goToDefinitionModifiers.baseline.jsonc -+++ new.goToDefinitionModifiers.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // - // private z: string; - // --// readonly x: string; --// --// async a() { } --// --// override b() {} --// --// public async c() { } --// } --// --// export function foo() { } -+// --- (line: 5) skipped --- - - - -@@= skipped -19, +10 lines =@@ - // - // private z: string; - // --// readonly x: string; --// --// async a() { } --// --// override b() {} --// --// public async c() { } --// } --// --// export function foo() { } -+// --- (line: 5) skipped --- - - diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc index 97686bd343..9e737a67fb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionMultipleDefinitions.baseline.jsonc @@ -1,17 +1,17 @@ // === goToDefinition === // === /a.ts === -// interface [|IFoo|] { +// <|interface [|IFoo|] { // instance1: number; -// } +// }|> // === /b.ts === -// interface [|IFoo|] { +// <|interface [|IFoo|] { // instance2: number; -// } +// }|> // -// interface [|IFoo|] { +// <|interface [|IFoo|] { // instance3: number; -// } +// }|> // // var ifoo: IFo/*GOTO DEF*/o; @@ -19,14 +19,14 @@ // === goToDefinition === // === /c.ts === -// module [|Module|] { +// <|module [|Module|] { // export class c1 { } -// } +// }|> // === /d.ts === -// module [|Module|] { +// <|module [|Module|] { // export class c2 { } -// } +// }|> // === /e.ts === // [|Modul/*GOTO DEF*/e|]; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc index c2fa7f79a0..df5c79dc81 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionNewExpressionTargetNotClass.baseline.jsonc @@ -2,9 +2,9 @@ // === /goToDefinitionNewExpressionTargetNotClass.ts === // class C2 { // } -// let [|I|]: { +// <|let [|I|]: { // [|new(): C2;|] -// }; +// };|> // new /*GOTO DEF*/I(); // let I2: { // }; @@ -18,6 +18,6 @@ // new(): C2; // }; // new I(); -// let [|I2|]: { -// }; +// <|let [|I2|]: { +// };|> // new /*GOTO DEF*/I2(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc index 653276103b..45ab952882 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectBindingElementPropertyName01.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionObjectBindingElementPropertyName01.ts === // interface I { -// [|property1|]: number; +// <|[|property1|]: number;|> // property2: string; // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc index 76242360fe..c14f841c79 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionObjectLiteralProperties.ts === // var o = { -// [|value|]: 0, +// <|[|value|]: 0|>, // get getter() {return 0 }, // set setter(v: number) { }, // method: () => { }, @@ -20,7 +20,7 @@ // === /goToDefinitionObjectLiteralProperties.ts === // var o = { // value: 0, -// get [|getter|]() {return 0 }, +// <|get [|getter|]() {return 0 }|>, // set setter(v: number) { }, // method: () => { }, // es6StyleMethod() { } @@ -39,7 +39,7 @@ // var o = { // value: 0, // get getter() {return 0 }, -// set [|setter|](v: number) { }, +// <|set [|setter|](v: number) { }|>, // method: () => { }, // es6StyleMethod() { } // }; @@ -58,7 +58,7 @@ // value: 0, // get getter() {return 0 }, // set setter(v: number) { }, -// [|method|]: () => { }, +// <|[|method|]: () => { }|>, // es6StyleMethod() { } // }; // @@ -77,7 +77,7 @@ // get getter() {return 0 }, // set setter(v: number) { }, // method: () => { }, -// [|es6StyleMethod|]() { } +// <|[|es6StyleMethod|]() { }|> // }; // // o.value; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc index 8ba14dc705..af9ba6c7a5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectLiteralProperties1.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionObjectLiteralProperties1.ts === // interface PropsBag { -// [|propx|]: number +// <|[|propx|]: number|> // } // function foo(arg: PropsBag) {} // foo({ @@ -17,7 +17,7 @@ // === goToDefinition === // === /goToDefinitionObjectLiteralProperties1.ts === // interface PropsBag { -// [|propx|]: number +// <|[|propx|]: number|> // } // function foo(arg: PropsBag) {} // foo({ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc index 857f644752..7efe777bc2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionObjectSpread.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionObjectSpread.ts === -// interface A1 { [|a|]: number }; -// interface A2 { [|a|]?: number }; +// interface A1 { <|[|a|]: number|> }; +// interface A2 { <|[|a|]?: number|> }; // let a1: A1; // let a2: A2; // let a12 = { ...a1, ...a2 }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc index 3dcc2ebc4c..3db99f4a04 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverloadsInMultiplePropertyAccesses.baseline.jsonc @@ -3,7 +3,7 @@ // namespace A { // export namespace B { // export function f(value: number): void; -// export function [|f|](value: string): void; +// <|export function [|f|](value: string): void;|> // export function f(value: number | string) {} // } // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc index 72647592ce..44a3be2370 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember1.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember1.ts === // class Foo { -// [|p|] = ''; +// <|[|p|] = '';|> // } // class Bar extends Foo { // /*GOTO DEF*/override p = ''; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff index d0c9133718..eeeba212ac 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember11.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === goToDefinition === // === /a.js === // class Foo { --// [|m|]() {} +-// <|[|m|]() {}|> +// m() {} // } // class Bar extends Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc index a806a546b8..83a561e89b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember12.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember12.ts === // class Foo { -// static [|p|] = ''; +// <|static [|p|] = '';|> // } // class Bar extends Foo { // static /*GOTO DEF*/override p = ''; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc index 00b5080a20..41e1c91302 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember13.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember13.ts === // class Foo { -// static [|m|]() {} +// <|static [|m|]() {}|> // } // class Bar extends Foo { // static /*GOTO DEF*/override m() {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc index 6da0128300..4eb40d4310 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember14.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember14.ts === // class A { -// [|m|]() {} +// <|[|m|]() {}|> // } // class B extends A {} // class C extends B { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc index 16cb84475b..891abb4cde 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember15.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember15.ts === // class A { -// static [|m|]() {} +// <|static [|m|]() {}|> // } // class B extends A {} // class C extends B { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc index 912ebcd379..3b5f75cd56 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc @@ -4,5 +4,5 @@ // } // // export class MySqlVarBinary extends MySqlColumn { -// static /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary"; +// <|static /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff index ac455c8167..50b9573629 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember17.baseline.jsonc.diff @@ -6,11 +6,11 @@ -// const entityKind = Symbol.for("drizzle:entityKind"); -// -// abstract class MySqlColumn { --// static readonly [|[entityKind]|]: string = "MySqlColumn"; +-// <|static readonly [|[entityKind]|]: string = "MySqlColumn";|> +// --- (line: 4) skipped --- // } // // export class MySqlVarBinary extends MySqlColumn { -// static /*GOTO DEF*/override readonly [entityKind]: string = "MySqlVarBinary"; -+// static /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary"; ++// <|static /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc index 82fd630b90..0dd1320d18 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc @@ -4,5 +4,5 @@ // } // // export class MySqlVarBinary extends MySqlColumn { -// /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary"; +// /*GOTO DEF*/<|override readonly [|[entityKind]|]: string = "MySqlVarBinary";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff index f48708137a..fa9b0784a8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember18.baseline.jsonc.diff @@ -6,11 +6,11 @@ -// const entityKind = Symbol.for("drizzle:entityKind"); -// -// abstract class MySqlColumn { --// readonly [|[entityKind]|]: string = "MySqlColumn"; +-// <|readonly [|[entityKind]|]: string = "MySqlColumn";|> +// --- (line: 4) skipped --- // } // // export class MySqlVarBinary extends MySqlColumn { -// /*GOTO DEF*/override readonly [entityKind]: string = "MySqlVarBinary"; -+// /*GOTO DEF*/override readonly [|[entityKind]|]: string = "MySqlVarBinary"; ++// /*GOTO DEF*/<|override readonly [|[entityKind]|]: string = "MySqlVarBinary";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc index 9a6e7362bf..f74c2b06d0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc @@ -4,5 +4,5 @@ // } // // export class B extends A { -// static /*GOTO DEF*/override readonly [|[prop]|] = "B"; +// <|static /*GOTO DEF*/override readonly [|[prop]|] = "B";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff index 9a27c18cd0..2716f86a65 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember19.baseline.jsonc.diff @@ -6,11 +6,11 @@ -// const prop = "foo" as const; -// -// abstract class A { --// static readonly [|[prop]|] = "A"; +-// <|static readonly [|[prop]|] = "A";|> +// --- (line: 4) skipped --- // } // // export class B extends A { -// static /*GOTO DEF*/override readonly [prop] = "B"; -+// static /*GOTO DEF*/override readonly [|[prop]|] = "B"; ++// <|static /*GOTO DEF*/override readonly [|[prop]|] = "B";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc index a1a9669fcb..edeb4ee4e8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember2.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember2.ts === // class Foo { -// [|m|]() {} +// <|[|m|]() {}|> // } // // class Bar extends Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc index 0583541163..4cfd802b42 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc @@ -4,5 +4,5 @@ // } // // export class B extends A { -// /*GOTO DEF*/override readonly [|[prop]|] = "B"; +// /*GOTO DEF*/<|override readonly [|[prop]|] = "B";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff index b0ac65ad8e..5108c29485 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember20.baseline.jsonc.diff @@ -6,11 +6,11 @@ -// const prop = "foo" as const; -// -// abstract class A { --// readonly [|[prop]|] = "A"; +-// <|readonly [|[prop]|] = "A";|> +// --- (line: 4) skipped --- // } // // export class B extends A { -// /*GOTO DEF*/override readonly [prop] = "B"; -+// /*GOTO DEF*/override readonly [|[prop]|] = "B"; ++// /*GOTO DEF*/<|override readonly [|[prop]|] = "B";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc index eb4779aae4..e1a8cefe10 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember21.baseline.jsonc @@ -5,5 +5,5 @@ // abstract class A {} // // export class B extends A { -// static /*GOTO DEF*/override readonly [|[prop]|] = "B"; +// <|static /*GOTO DEF*/override readonly [|[prop]|] = "B";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc index 1b3c7288d9..3ac720999d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember22.baseline.jsonc @@ -5,5 +5,5 @@ // abstract class A {} // // export class B extends A { -// /*GOTO DEF*/override readonly [|[prop]|] = "B"; +// /*GOTO DEF*/<|override readonly [|[prop]|] = "B";|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc index 7ca46d1935..7a56cd1921 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember23.baseline.jsonc @@ -4,5 +4,5 @@ // } // // export class B extends A { -// static /*GOTO DEF*/override [|[prop]|]() {} +// <|static /*GOTO DEF*/override [|[prop]|]() {}|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc index ea10917ca5..30604c5985 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember24.baseline.jsonc @@ -4,5 +4,5 @@ // } // // export class B extends A { -// /*GOTO DEF*/override [|[prop]|]() {} +// /*GOTO DEF*/<|override [|[prop]|]() {}|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc index 5353f949df..19f5879ff9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember25.baseline.jsonc @@ -5,5 +5,5 @@ // abstract class A {} // // export class B extends A { -// static /*GOTO DEF*/override [|[prop]|]() {} +// <|static /*GOTO DEF*/override [|[prop]|]() {}|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc index 95bacc0021..758afe5fea 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember26.baseline.jsonc @@ -5,5 +5,5 @@ // abstract class A {} // // export class B extends A { -// /*GOTO DEF*/override [|[prop]|]() {} +// /*GOTO DEF*/<|override [|[prop]|]() {}|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc index 9d266605f6..78c7893bb1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember3.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember3.ts === // abstract class Foo { -// abstract [|m|]() {} +// <|abstract [|m|]() {}|> // } // // export class Bar extends Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc index ec6a0eb35d..100483233e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember4.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember4.ts === // class Foo { -// [|m|]() {} +// <|[|m|]() {}|> // } // function f () { // return class extends Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc index ef37f15681..95c50a73c9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember5.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember5.ts === // class Foo extends (class { -// [|m|]() {} +// <|[|m|]() {}|> // }) { // /*GOTO DEF*/override m() {} // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc index 0d9e9f61de..ad24f6dff0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember6.baseline.jsonc @@ -4,5 +4,5 @@ // m() {} // } // class Bar extends Foo { -// /*GOTO DEF*/override [|m1|]() {} +// /*GOTO DEF*/<|override [|m1|]() {}|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc index c3bd341438..604ab2cf65 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember7.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /goToDefinitionOverriddenMember7.ts === // class Foo { -// /*GOTO DEF*/override [|m|]() {} +// /*GOTO DEF*/<|override [|m|]() {}|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc index f19fc5db40..679ef42943 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /a.ts === // export class A { -// [|m|]() {} +// <|[|m|]() {}|> // } // === /b.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff index 142adc2083..691f3504f8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember8.baseline.jsonc.diff @@ -1,7 +1,7 @@ --- old.goToDefinitionOverriddenMember8.baseline.jsonc +++ new.goToDefinitionOverriddenMember8.baseline.jsonc @@= skipped -3, +3 lines =@@ - // [|m|]() {} + // <|[|m|]() {}|> // } -// === /./b.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc index e38d294a25..f70bbeeece 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionOverriddenMember9.baseline.jsonc @@ -4,7 +4,7 @@ // m(): void; // } // class A { -// [|m|]() {}; +// <|[|m|]() {}|>; // } // class B extends A implements I { // /*GOTO DEF*/override m() {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc index 97d4a0e865..c2d8de6e88 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPartialImplementation.baseline.jsonc @@ -1,16 +1,16 @@ // === goToDefinition === // === /goToDefinitionPartialImplementation_1.ts === // module A { -// export interface [|IA|] { +// <|export interface [|IA|] { // y: string; -// } +// }|> // } // === /goToDefinitionPartialImplementation_2.ts === // module A { -// export interface [|IA|] { +// <|export interface [|IA|] { // x: number; -// } +// }|> // // var x: /*GOTO DEF*/IA; // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc index 99b8ad102d..06baf05bd6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPrivateName.baseline.jsonc @@ -2,7 +2,7 @@ // === /goToDefinitionPrivateName.ts === // class A { // #method() { } -// [|#foo|] = 3; +// <|[|#foo|] = 3;|> // get #prop() { return ""; } // set #prop(value: string) { } // constructor() { @@ -17,7 +17,7 @@ // === goToDefinition === // === /goToDefinitionPrivateName.ts === // class A { -// [|#method|]() { } +// <|[|#method|]() { }|> // #foo = 3; // get #prop() { return ""; } // set #prop(value: string) { } @@ -35,8 +35,8 @@ // class A { // #method() { } // #foo = 3; -// get [|#prop|]() { return ""; } -// set [|#prop|](value: string) { } +// <|get [|#prop|]() { return ""; }|> +// <|set [|#prop|](value: string) { }|> // constructor() { // this.#foo // this.#method diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc index 0c8d5616e6..38eb802997 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionPropertyAssignment.ts === -// export const [|Component|] = () => { return "OK"} +// <|export const [|Component|] = () => { return "OK"}|> // Component.displayName = 'Component' // // /*GOTO DEF*/Component @@ -12,7 +12,7 @@ // === goToDefinition === // === /goToDefinitionPropertyAssignment.ts === // export const Component = () => { return "OK"} -// Component.[|displayName|] = 'Component' +// <|Component.[|displayName|] = 'Component'|> // // Component // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff new file mode 100644 index 0000000000..e6b1fe42d5 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionPropertyAssignment.baseline.jsonc.diff @@ -0,0 +1,11 @@ +--- old.goToDefinitionPropertyAssignment.baseline.jsonc ++++ new.goToDefinitionPropertyAssignment.baseline.jsonc +@@= skipped -11, +11 lines =@@ + // === goToDefinition === + // === /goToDefinitionPropertyAssignment.ts === + // export const Component = () => { return "OK"} +-// <|Component.[|displayName|]|> = 'Component' ++// <|Component.[|displayName|] = 'Component'|> + // + // Component + // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc index e8fa4c572d..05d7f96970 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionRest.baseline.jsonc @@ -2,7 +2,7 @@ // === /goToDefinitionRest.ts === // interface Gen { // x: number; -// [|parent|]: Gen; +// <|[|parent|]: Gen;|> // millenial: string; // } // let t: Gen; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc index de684a61f8..4cc0337d08 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn1.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /goToDefinitionReturn1.ts === -// function [|foo|]() { +// <|function [|foo|]() { // /*GOTO DEF*/return 10; -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc index f649b2d0f8..9abfe1131d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn3.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionReturn3.ts === // class C { -// [|m|]() { +// <|[|m|]() { // /*GOTO DEF*/return 1; -// } +// }|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc index e723352c1c..f68c313ecd 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn5.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionReturn5.ts === -// function [|foo|]() { +// <|function [|foo|]() { // class Foo { // static { /*GOTO DEF*/return; } // } -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc index b2f225744e..b7bc866511 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionReturn7.baseline.jsonc @@ -2,6 +2,6 @@ // === /goToDefinitionReturn7.ts === // function foo(a: string, b: string): string; // function foo(a: number, b: number): number; -// function [|foo|](a: any, b: any): any { +// <|function [|foo|](a: any, b: any): any { // /*GOTO DEF*/return a + b; -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc index 24fdd9a524..64db88286e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSameFile.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionSameFile.ts === -// var [|localVariable|]; +// <|var [|localVariable|];|> // function localFunction() { } // class localClass { } // interface localInterface{ } @@ -18,7 +18,7 @@ // === goToDefinition === // === /goToDefinitionSameFile.ts === // var localVariable; -// function [|localFunction|]() { } +// <|function [|localFunction|]() { }|> // class localClass { } // interface localInterface{ } // module localModule{ export var foo = 1;} @@ -36,7 +36,7 @@ // === /goToDefinitionSameFile.ts === // var localVariable; // function localFunction() { } -// class [|localClass|] { } +// <|class [|localClass|] { }|> // interface localInterface{ } // module localModule{ export var foo = 1;} // @@ -54,7 +54,7 @@ // var localVariable; // function localFunction() { } // class localClass { } -// interface [|localInterface|]{ } +// <|interface [|localInterface|]{ }|> // module localModule{ export var foo = 1;} // // @@ -72,7 +72,7 @@ // function localFunction() { } // class localClass { } // interface localInterface{ } -// module [|localModule|]{ export var foo = 1;} +// <|module [|localModule|]{ export var foo = 1;}|> // // // localVariable = 1; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc index fbdd60c876..7e7f76735e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSatisfiesExpression1.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionSatisfiesExpression1.ts === // const STRINGS = { -// /*GOTO DEF*/[|title|]: 'A Title', +// /*GOTO DEF*/<|[|title|]: 'A Title'|>, // } satisfies Record; // // //somewhere in app @@ -12,7 +12,7 @@ // === goToDefinition === // === /goToDefinitionSatisfiesExpression1.ts === // const STRINGS = { -// [|title|]: 'A Title', +// <|[|title|]: 'A Title'|>, // } satisfies Record; // // //somewhere in app diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc index 62aa457a72..996a16975d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariable.baseline.jsonc @@ -2,6 +2,6 @@ // === /goToDefinitionShadowVariable.ts === // var shadowVariable = "foo"; // function shadowVariableTestModule() { -// var [|shadowVariable|]; +// <|var [|shadowVariable|];|> // /*GOTO DEF*/shadowVariable = 1; // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc index a933353fbd..fbcfdce0b4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShadowVariableInsideModule.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionShadowVariableInsideModule.ts === // module shdModule { -// var [|shdVar|]; +// <|var [|shdVar|];|> // /*GOTO DEF*/shdVar = 1; // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc index d6e9222dfc..02d377f826 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc @@ -4,7 +4,7 @@ // * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/name) // */ // /** @deprecated */ -// declare const [|name|]: void; +// <|declare const [|name|]: void;|> // /** // * The **`Window.navigator`** read-only property returns a reference to the Navigator object, which has methods and properties about the application running the script. // * @@ -24,8 +24,8 @@ // === goToDefinition === // === /goToDefinitionShorthandProperty01.ts === // var name = "hello"; -// var [|id|] = 100000; -// declare var [|id|]; +// <|var [|id|] = 100000;|> +// <|declare var [|id|];|> // var obj = {name, /*GOTO DEF*/id}; // obj.name; // obj.id; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff index 9598e225ba..2574e98ed1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty01.baseline.jsonc.diff @@ -7,7 +7,7 @@ +// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/name) +// */ +// /** @deprecated */ -+// declare const [|name|]: void; ++// <|declare const [|name|]: void;|> +// /** +// * The **`Window.navigator`** read-only property returns a reference to the Navigator object, which has methods and properties about the application running the script. +// * @@ -15,7 +15,7 @@ +// + // === /goToDefinitionShorthandProperty01.ts === --// var [|name|] = "hello"; +-// <|var [|name|] = "hello";|> +// var name = "hello"; // var id = 100000; // declare var id; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc index f10cb67cde..5da39164cf 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty03.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /goToDefinitionShorthandProperty03.ts === -// var [|x|] = { +// <|var [|x|] = { // /*GOTO DEF*/x -// } +// }|> // let y = { // y // } @@ -14,6 +14,6 @@ // var x = { // x // } -// let [|y|] = { +// <|let [|y|] = { // /*GOTO DEF*/y -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff index 29a6dab0e8..6411b65cd3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty04.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === goToDefinition === // === /goToDefinitionShorthandProperty04.ts === // interface Foo { --// [|foo|](): void +-// <|[|foo|](): void|> +// foo(): void // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc index 414558d93d..e1ee1d0478 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc @@ -3,7 +3,7 @@ // interface Foo { // foo(): void // } -// const [|foo|] = 1; +// <|const [|foo|] = 1;|> // let x: Foo = { // f/*GOTO DEF*/oo // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff index a39c35ce2f..897f9892aa 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty05.baseline.jsonc.diff @@ -4,8 +4,8 @@ // === goToDefinition === // === /goToDefinitionShorthandProperty05.ts === // interface Foo { --// [|foo|](): void +-// <|[|foo|](): void|> +// foo(): void // } - // const [|foo|] = 1; + // <|const [|foo|] = 1;|> // let x: Foo = { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc index ce825635ce..55a177cab1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionShorthandProperty06.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionShorthandProperty06.ts === // interface Foo { -// [|foo|](): void +// <|[|foo|](): void|> // } // const foo = 1; // let x: Foo = { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc index 0e0342a473..44fa8c0917 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /a.js === -// [|module.exports = function [|f|]() {}|] +// [|module.exports = <|function [|f|]() {}|]|> // === /b.js === // const f = require("./a"); @@ -10,7 +10,7 @@ // === goToDefinition === // === /a.js === -// [|module.exports = function [|f|]() {}|] +// [|module.exports = <|function [|f|]() {}|]|> // === /bar.ts === // import f = require("./a"); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff index 9ceffdafe5..a66791c13b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSignatureAlias_require.baseline.jsonc.diff @@ -3,8 +3,8 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /a.js === --// module.exports = function [|f|]() {} -+// [|module.exports = function [|f|]() {}|] +-// module.exports = <|function [|f|]() {}|> ++// [|module.exports = <|function [|f|]() {}|]|> // === /b.js === // const f = require("./a"); @@ -12,8 +12,8 @@ // === goToDefinition === // === /a.js === --// module.exports = function [|f|]() {} -+// [|module.exports = function [|f|]() {}|] +-// module.exports = <|function [|f|]() {}|> ++// [|module.exports = <|function [|f|]() {}|]|> // === /bar.ts === // import f = require("./a"); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc index 989c0c9967..8b2fd92392 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /Definition.ts === -// class [|c|] { } +// <|class [|c|] { }|> // === /Consumption.ts === // var n = new /*GOTO DEF*/[|c|](); @@ -10,7 +10,7 @@ // === goToDefinition === // === /Definition.ts === -// class [|c|] { } +// <|class [|c|] { }|> // === /Consumption.ts === // var n = new c(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff index 8b7ee2f6bc..2ea7319dcc 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSimple.baseline.jsonc.diff @@ -1,7 +1,7 @@ --- old.goToDefinitionSimple.baseline.jsonc +++ new.goToDefinitionSimple.baseline.jsonc @@= skipped -2, +2 lines =@@ - // class [|c|] { } + // <|class [|c|] { }|> // === /Consumption.ts === -// var n = new /*GOTO DEF*/[|c|](); @@ -12,7 +12,7 @@ @@= skipped -10, +10 lines =@@ - // class [|c|] { } + // <|class [|c|] { }|> // === /Consumption.ts === -// var n = new c(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff new file mode 100644 index 0000000000..240d196610 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase1.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionSwitchCase1.baseline.jsonc ++++ new.goToDefinitionSwitchCase1.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionSwitchCase1.ts === +-// <|[|switch|] (null )|> { ++// [|switch|] (null ) { + // /*GOTO DEF*/case null: break; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff new file mode 100644 index 0000000000..bbaf9be7d4 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase2.baseline.jsonc.diff @@ -0,0 +1,9 @@ +--- old.goToDefinitionSwitchCase2.baseline.jsonc ++++ new.goToDefinitionSwitchCase2.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionSwitchCase2.ts === +-// <|[|switch|] (null)|> { ++// [|switch|] (null) { + // /*GOTO DEF*/default: break; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff new file mode 100644 index 0000000000..02cc308f29 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase3.baseline.jsonc.diff @@ -0,0 +1,19 @@ +--- old.goToDefinitionSwitchCase3.baseline.jsonc ++++ new.goToDefinitionSwitchCase3.baseline.jsonc +@@= skipped -0, +0 lines =@@ + // === goToDefinition === + // === /goToDefinitionSwitchCase3.ts === +-// <|[|switch|] (null)|> { ++// [|switch|] (null) { + // /*GOTO DEF*/default: { + // switch (null) { + // default: break; +@@= skipped -13, +13 lines =@@ + // === /goToDefinitionSwitchCase3.ts === + // switch (null) { + // default: { +-// <|[|switch|] (null)|> { ++// [|switch|] (null) { + // /*GOTO DEF*/default: break; + // } + // }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff new file mode 100644 index 0000000000..f2d8069335 --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionSwitchCase4.baseline.jsonc.diff @@ -0,0 +1,10 @@ +--- old.goToDefinitionSwitchCase4.baseline.jsonc ++++ new.goToDefinitionSwitchCase4.baseline.jsonc +@@= skipped -3, +3 lines =@@ + // case null: break; + // } + // +-// <|[|switch|] (null)|> { ++// [|switch|] (null) { + // /*GOTO DEF*/case null: break; + // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc index ef6f61eb8e..fbaeda8706 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTaggedTemplateOverloads.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionTaggedTemplateOverloads.ts === -// function [|f|](strs: TemplateStringsArray, x: number): void; +// <|function [|f|](strs: TemplateStringsArray, x: number): void;|> // function f(strs: TemplateStringsArray, x: boolean): void; // function f(strs: TemplateStringsArray, x: number | boolean) {} // @@ -12,7 +12,7 @@ // === goToDefinition === // === /goToDefinitionTaggedTemplateOverloads.ts === // function f(strs: TemplateStringsArray, x: number): void; -// function [|f|](strs: TemplateStringsArray, x: boolean): void; +// <|function [|f|](strs: TemplateStringsArray, x: boolean): void;|> // function f(strs: TemplateStringsArray, x: number | boolean) {} // // f`${0}`; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc index 0b3dc0c246..550c8ef301 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionThis.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionThis.ts === -// function f([|this|]: number) { +// function f(<|[|this|]: number|>) { // return /*GOTO DEF*/this; // } // class C { @@ -15,10 +15,10 @@ // function f(this: number) { // return this; // } -// class [|C|] { +// <|class [|C|] { // constructor() { return /*GOTO DEF*/this; } // get self(this: number) { return this; } -// } +// }|> @@ -29,5 +29,5 @@ // } // class C { // constructor() { return this; } -// get self([|this|]: number) { return /*GOTO DEF*/this; } +// get self(<|[|this|]: number|>) { return /*GOTO DEF*/this; } // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc index b214099640..d0aa9235a1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeOnlyImport.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /a.ts === -// enum [|SyntaxKind|] { SourceFile } +// <|enum [|SyntaxKind|] { SourceFile }|> // export type { SyntaxKind } // === /c.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc index 790a5121c9..351b78b100 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypePredicate.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionTypePredicate.ts === // class A {} -// function f([|parameter|]: any): /*GOTO DEF*/parameter is A { +// function f(<|[|parameter|]: any|>): /*GOTO DEF*/parameter is A { // return typeof parameter === "string"; // } @@ -9,7 +9,7 @@ // === goToDefinition === // === /goToDefinitionTypePredicate.ts === -// class [|A|] {} +// <|class [|A|] {}|> // function f(parameter: any): parameter is /*GOTO DEF*/A { // return typeof parameter === "string"; // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc index d27141f9f7..e42516409b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionTypeofThis.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /goToDefinitionTypeofThis.ts === -// function f([|this|]: number) { +// function f(<|[|this|]: number|>) { // type X = typeof /*GOTO DEF*/this; // } // class C { @@ -15,10 +15,10 @@ // function f(this: number) { // type X = typeof this; // } -// class [|C|] { +// <|class [|C|] { // constructor() { type X = typeof /*GOTO DEF*/this; } // get self(this: number) { type X = typeof this; } -// } +// }|> @@ -29,5 +29,5 @@ // } // class C { // constructor() { type X = typeof this; } -// get self([|this|]: number) { type X = typeof /*GOTO DEF*/this; } +// get self(<|[|this|]: number|>) { type X = typeof /*GOTO DEF*/this; } // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc index c1dcb0b04e..981224465d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty1.baseline.jsonc @@ -1,12 +1,12 @@ // === goToDefinition === // === /goToDefinitionUnionTypeProperty1.ts === // interface One { -// [|commonProperty|]: number; +// <|[|commonProperty|]: number;|> // commonFunction(): number; // } // // interface Two { -// [|commonProperty|]: string +// <|[|commonProperty|]: string|> // commonFunction(): number; // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc index 6dae48030b..46f49e42b5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty2.baseline.jsonc @@ -1,12 +1,12 @@ // === goToDefinition === // === /goToDefinitionUnionTypeProperty2.ts === // interface HasAOrB { -// [|a|]: string; +// <|[|a|]: string;|> // b: string; // } // // interface One { -// common: { [|a|] : number; }; +// common: { <|[|a|] : number;|> }; // } // // interface Two { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc index 0788a8117d..6e10014799 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty3.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /goToDefinitionUnionTypeProperty3.ts === // interface Array { -// [|specialPop|](): T +// <|[|specialPop|](): T|> // } // // var strings: string[]; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc index 0df12e9990..ff778b5d46 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty4.baseline.jsonc @@ -1,15 +1,15 @@ // === goToDefinition === // === /goToDefinitionUnionTypeProperty4.ts === // interface SnapCrackle { -// [|pop|](): string; +// <|[|pop|](): string;|> // } // // interface Magnitude { -// [|pop|](): number; +// <|[|pop|](): number;|> // } // // interface Art { -// [|pop|](): boolean; +// <|[|pop|](): boolean;|> // } // // var art: Art; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc index 7f483e9c02..2004f5aa96 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionUnionTypeProperty_discriminated.baseline.jsonc @@ -3,7 +3,7 @@ // type U = A | B; // // interface A { -// [|kind|]: "a"; +// <|[|kind|]: "a";|> // prop: number; // }; // @@ -27,7 +27,7 @@ // // interface A { // kind: "a"; -// [|prop|]: number; +// <|[|prop|]: number;|> // }; // // interface B { @@ -51,12 +51,12 @@ // type U = A | B; // // interface A { -// [|kind|]: "a"; +// <|[|kind|]: "a";|> // prop: number; // }; // // interface B { -// [|kind|]: "b"; +// <|[|kind|]: "b";|> // prop: string; // } // @@ -77,12 +77,12 @@ // // interface A { // kind: "a"; -// [|prop|]: number; +// <|[|prop|]: number;|> // }; // // interface B { // kind: "b"; -// [|prop|]: string; +// <|[|prop|]: string;|> // } // // const u: U = { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc index 234342516d..56dcbffe60 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /foo.js === // const Bar; -// const [|Foo|] = [|Bar|] = function () {} +// <|const [|Foo|] = [|Bar|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff index 0ce8f6ebc9..1479a7906d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === goToDefinition === // === /foo.js === // const Bar; --// const Foo = [|Bar|] = function () {} -+// const [|Foo|] = [|Bar|] = function () {} +-// const Foo = [|Bar|] = <|function () {}|> ++// <|const [|Foo|] = [|Bar|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc index 30aca9d564..0687d3444e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /foo.js === -// const [|Foo|] = module.[|exports|] = function () {} +// <|const [|Foo|] = module.[|exports|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff index 5637529236..a09c6327f4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment1.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.js === --// const Foo = module.[|exports|] = function () {} -+// const [|Foo|] = module.[|exports|] = function () {} +-// const Foo = module.[|exports|] = <|function () {}|> ++// <|const [|Foo|] = module.[|exports|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc index 8e94c0fc30..82bb3eb2a8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /foo.ts === // const Bar; -// const [|Foo|] = [|Bar|] = function () {} +// <|const [|Foo|] = [|Bar|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff index 346f2a71ac..cd430153b7 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment2.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === goToDefinition === // === /foo.ts === // const Bar; --// const Foo = [|Bar|] = function () {} -+// const [|Foo|] = [|Bar|] = function () {} +-// const Foo = [|Bar|] = <|function () {}|> ++// <|const [|Foo|] = [|Bar|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc index d826f639e3..ab01cc6e56 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /foo.ts === -// const [|Foo|] = module.[|exports|] = function () {} +// <|const [|Foo|] = module.[|exports|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff index 4d5bfb86a0..e981e78f30 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionVariableAssignment3.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /foo.ts === --// const Foo = module.[|exports|] = function () {} -+// const [|Foo|] = module.[|exports|] = function () {} +-// const Foo = module.[|exports|] = <|function () {}|> ++// <|const [|Foo|] = module.[|exports|] = <|function () {}|>|> // Foo.prototype.bar = function() {} // new Foo/*GOTO DEF*/(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc index 04d7ab9643..773ffe46bf 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield1.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /goToDefinitionYield1.ts === -// function* [|gen|]() { +// <|function* [|gen|]() { // /*GOTO DEF*/yield 0; -// } +// }|> // // const genFunction = function*() { // yield 0; @@ -16,6 +16,6 @@ // yield 0; // } // -// const [|genFunction|] = function*() { +// const [|genFunction|] = <|function*() { // /*GOTO DEF*/yield 0; -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc index c9318f80db..cdbdbd3692 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield2.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /goToDefinitionYield2.ts === // function* outerGen() { -// function* [|gen|]() { +// <|function* [|gen|]() { // /*GOTO DEF*/yield 0; -// } +// }|> // return gen // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc index 7071b5bb56..16b4235f86 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc @@ -1,12 +1,14 @@ // === goToDefinition === // === /goToDefinitionYield3.ts === // class C { -// [|notAGenerator|]() { +// <|[|notAGenerator|]() { // /*GOTO DEF*/yield 0; -// } +// }|> // // foo*() { -// --- (line: 7) skipped --- +// yield 0; +// } +// } @@ -17,7 +19,7 @@ // yield 0; // } // -// foo*[||]() { +// foo<|*[||]() { // /*GOTO DEF*/yield 0; -// } +// }|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff deleted file mode 100644 index ef9ccad573..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield3.baseline.jsonc.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- old.goToDefinitionYield3.baseline.jsonc -+++ new.goToDefinitionYield3.baseline.jsonc -@@= skipped -5, +5 lines =@@ - // } - // - // foo*() { --// yield 0; --// } --// } -+// --- (line: 7) skipped --- - - diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc index a3f9d8721b..e68a473ced 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinitionYield4.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /goToDefinitionYield4.ts === // function* gen() { -// class C { [|[/*GOTO DEF*/yield 10]|]() {} } +// class C { <|[|[/*GOTO DEF*/yield 10]|]() {}|> } // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc index 29fff6be02..f7274257d8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc @@ -1,11 +1,13 @@ // === goToDefinition === // === /goToDefinition_filteringGenericMappedType.ts === // const obj = { -// get [|id|]() { +// <|get [|id|]() { // return 1; -// }, +// }|>, // name: "test", -// --- (line: 6) skipped --- +// }; +// +// --- (line: 8) skipped --- // --- (line: 17) skipped --- // name: true, diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff deleted file mode 100644 index f60d3845ab..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringGenericMappedType.baseline.jsonc.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.goToDefinition_filteringGenericMappedType.baseline.jsonc -+++ new.goToDefinition_filteringGenericMappedType.baseline.jsonc -@@= skipped -4, +4 lines =@@ - // return 1; - // }, - // name: "test", --// }; --// --// --- (line: 8) skipped --- -+// --- (line: 6) skipped --- - - // --- (line: 17) skipped --- - // name: true, \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc index fe4215ee81..75c160f3a6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_filteringMappedType.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /goToDefinition_filteringMappedType.ts === -// const obj = { [|a|]: 1, b: 2 }; +// const obj = { <|[|a|]: 1|>, b: 2 }; // const filtered: { [P in keyof typeof obj as P extends 'b' ? never : P]: 0; } = { a: 0 }; // filtered./*GOTO DEF*/a; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc index b19fd8260d..bc736b8831 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_mappedType.baseline.jsonc @@ -1,5 +1,5 @@ // === goToDefinition === // === /goToDefinition_mappedType.ts === -// interface I { [|m|](): void; }; +// interface I { <|[|m|](): void;|> }; // declare const i: { [K in "m"]: I[K] }; // i./*GOTO DEF*/m(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc index 50d632d1cb..fe2e7ca908 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_super.baseline.jsonc @@ -4,7 +4,7 @@ // [|constructor() {}|] // x() {} // } -// class [|B|] extends A {} +// <|class [|B|] extends A {}|> // class C extends B { // constructor() { // /*GOTO DEF*/super(); @@ -21,7 +21,7 @@ // constructor() {} // x() {} // } -// class [|B|] extends A {} +// <|class [|B|] extends A {}|> // class C extends B { // constructor() { // super(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc index 087f06c4d9..2aadbf05a6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToDefinition_untypedModule.baseline.jsonc @@ -1,4 +1,4 @@ // === goToDefinition === // === /a.ts === -// import { [|f|] } from "foo"; +// <|import { [|f|] } from "foo";|> // /*GOTO DEF*/f(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc index 398dffba0c..12b487599f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc @@ -1,4 +1,4 @@ // === goToDefinition === // === /b.ts === -// import [|n|] = require('a'); +// <|import [|n|] = require('a');|> // var x = new /*GOTO DEF*/n.Foo(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff index 09f4886c6a..209678411f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToModuleAliasDefinition.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /b.ts === --// import [|n|] = require('a'); +-// <|import [|n|] = require('a');|> -// var x = new /*GOTO DEF*/n.Foo(); -+// import [|n|] = require('a'); ++// <|import [|n|] = require('a');|> +// var x = new /*GOTO DEF*/n.Foo(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc index 1b63927bb4..68d3d58aef 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/goToTypeDefinition4.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /foo.ts === -// export type [|T|] = string; -// export const [|T|] = ""; +// <|export type [|T|] = string;|> +// <|export const [|T|] = "";|> // === /bar.ts === // import { T } from "./foo"; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc index 7460b0ef63..f15d32747b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionConstructorFunction.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /gotoDefinitionConstructorFunction.js === -// function [|StringStreamm|]() { -// } +// <|function [|StringStreamm|]() { +// }|> // StringStreamm.prototype = { // }; // diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc index abb98b47fe..6801a6b4fb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc @@ -4,4 +4,4 @@ // interface Test { // prop2: number // } -// bar(({[|pr/*GOTO DEF*/op2|]})=>{}); \ No newline at end of file +// bar((<|{[|pr/*GOTO DEF*/op2|]}|>)=>{}); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff index 71fbd8f805..6a6500cf27 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern1.baseline.jsonc.diff @@ -8,8 +8,8 @@ -// } +// --- (line: 3) skipped --- // interface Test { --// [|prop2|]: number +-// <|[|prop2|]: number|> +// prop2: number // } -// bar(({pr/*GOTO DEF*/op2})=>{}); -+// bar(({[|pr/*GOTO DEF*/op2|]})=>{}); \ No newline at end of file ++// bar((<|{[|pr/*GOTO DEF*/op2|]}|>)=>{}); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc index 2cde751515..b99b75b355 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /gotoDefinitionInObjectBindingPattern2.ts === -// var p0 = ({[|a/*GOTO DEF*/a|]}) => {console.log(aa)}; +// var p0 = (<|{[|a/*GOTO DEF*/a|]}|>) => {console.log(aa)}; // function f2({ a1, b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} @@ -8,11 +8,11 @@ // === goToDefinition === // === /gotoDefinitionInObjectBindingPattern2.ts === // var p0 = ({aa}) => {console.log(aa)}; -// function f2({ [|a/*GOTO DEF*/1|], b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} +// function f2(<|{ [|a/*GOTO DEF*/1|], b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }|>) {} // === goToDefinition === // === /gotoDefinitionInObjectBindingPattern2.ts === // var p0 = ({aa}) => {console.log(aa)}; -// function f2({ a1, [|b/*GOTO DEF*/1|] }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} \ No newline at end of file +// function f2(<|{ a1, [|b/*GOTO DEF*/1|] }: { a1: number, b1: number } = { a1: 0, b1: 0 }|>) {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff index 183e1e764a..457b9bfbf7 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionInObjectBindingPattern2.baseline.jsonc.diff @@ -4,7 +4,7 @@ // === goToDefinition === // === /gotoDefinitionInObjectBindingPattern2.ts === -// var p0 = ({a/*GOTO DEF*/a}) => {console.log(aa)}; -+// var p0 = ({[|a/*GOTO DEF*/a|]}) => {console.log(aa)}; ++// var p0 = (<|{[|a/*GOTO DEF*/a|]}|>) => {console.log(aa)}; // function f2({ a1, b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} @@ -12,13 +12,13 @@ // === goToDefinition === // === /gotoDefinitionInObjectBindingPattern2.ts === // var p0 = ({aa}) => {console.log(aa)}; --// function f2({ a/*GOTO DEF*/1, b1 }: { [|a1|]: number, b1: number } = { a1: 0, b1: 0 }) {} -+// function f2({ [|a/*GOTO DEF*/1|], b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} +-// function f2({ a/*GOTO DEF*/1, b1 }: { <|[|a1|]: number,|> b1: number } = { a1: 0, b1: 0 }) {} ++// function f2(<|{ [|a/*GOTO DEF*/1|], b1 }: { a1: number, b1: number } = { a1: 0, b1: 0 }|>) {} // === goToDefinition === // === /gotoDefinitionInObjectBindingPattern2.ts === // var p0 = ({aa}) => {console.log(aa)}; --// function f2({ a1, b/*GOTO DEF*/1 }: { a1: number, [|b1|]: number } = { a1: 0, b1: 0 }) {} -+// function f2({ a1, [|b/*GOTO DEF*/1|] }: { a1: number, b1: number } = { a1: 0, b1: 0 }) {} \ No newline at end of file +-// function f2({ a1, b/*GOTO DEF*/1 }: { a1: number, <|[|b1|]: number|> } = { a1: 0, b1: 0 }) {} ++// function f2(<|{ a1, [|b/*GOTO DEF*/1|] }: { a1: number, b1: number } = { a1: 0, b1: 0 }|>) {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc index 7a13785ff3..a4ecaff1c6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /foo.ts === -// interface [|Foo|] { +// <|interface [|Foo|] { // foo: string -// } +// }|> // namespace NS { // export interface Bar { // baz: Foo @@ -22,9 +22,9 @@ // foo: string // } // namespace NS { -// export interface [|Bar|] { +// <|export interface [|Bar|] { // baz: Foo -// } +// }|> // } // /** {@link Foo} foooo*/ // const a = "" @@ -38,13 +38,15 @@ // === goToDefinition === // === /foo.ts === -// interface [|Foo|] { +// <|interface [|Foo|] { // foo: string -// } +// }|> // namespace NS { -// --- (line: 5) skipped --- - -// --- (line: 9) skipped --- +// export interface Bar { +// baz: Foo +// } +// } +// /** {@link Foo} foooo*/ // const a = "" // /** {@link NS.Bar} ns.bar*/ // const b = "" @@ -62,9 +64,9 @@ // foo: string // } // namespace NS { -// export interface [|Bar|] { +// <|export interface [|Bar|] { // baz: Foo -// } +// }|> // } // /** {@link Foo} foooo*/ // const a = "" @@ -87,7 +89,7 @@ // /** {@link Foo f1}*/ // const c = "" // /** {@link NS.Bar ns.bar}*/ -// const [|d|] = "" +// <|const [|d|] = ""|> // /** {@link /*GOTO DEF*/d }dd*/ // const e = "" // /** @param x {@link Foo} */ @@ -97,11 +99,13 @@ // === goToDefinition === // === /foo.ts === -// interface [|Foo|] { +// <|interface [|Foo|] { // foo: string -// } +// }|> // namespace NS { -// --- (line: 5) skipped --- +// export interface Bar { +// baz: Foo +// --- (line: 7) skipped --- // --- (line: 15) skipped --- // const d = "" @@ -114,11 +118,13 @@ // === goToDefinition === // === /foo.ts === -// interface [|Foo|] { +// <|interface [|Foo|] { // foo: string -// } +// }|> // namespace NS { -// --- (line: 5) skipped --- +// export interface Bar { +// baz: Foo +// --- (line: 7) skipped --- // === /bar.ts === // /** {@link /*GOTO DEF*/Foo }dd*/ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff deleted file mode 100644 index 474ad9e4cf..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag1.baseline.jsonc.diff +++ /dev/null @@ -1,39 +0,0 @@ ---- old.gotoDefinitionLinkTag1.baseline.jsonc -+++ new.gotoDefinitionLinkTag1.baseline.jsonc -@@= skipped -41, +41 lines =@@ - // foo: string - // } - // namespace NS { --// export interface Bar { --// baz: Foo --// } --// } --// /** {@link Foo} foooo*/ -+// --- (line: 5) skipped --- -+ -+// --- (line: 9) skipped --- - // const a = "" - // /** {@link NS.Bar} ns.bar*/ - // const b = "" -@@= skipped -61, +59 lines =@@ - // foo: string - // } - // namespace NS { --// export interface Bar { --// baz: Foo --// --- (line: 7) skipped --- -+// --- (line: 5) skipped --- - - // --- (line: 15) skipped --- - // const d = "" -@@= skipped -19, +17 lines =@@ - // foo: string - // } - // namespace NS { --// export interface Bar { --// baz: Foo --// --- (line: 7) skipped --- -+// --- (line: 5) skipped --- - - // === /bar.ts === - // /** {@link /*GOTO DEF*/Foo }dd*/ \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff index b7793cf9f9..c3b76ee3f2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag3.baseline.jsonc.diff @@ -7,7 +7,8 @@ -// Foo +// [|Foo|] // } --// interface [|Foo|] { +-// <|interface [|Foo|] { +// interface Foo { // foo: E.Foo; - // } \ No newline at end of file +-// }|> ++// } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff index e9b88b9916..563bdc2e76 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionLinkTag4.baseline.jsonc.diff @@ -3,9 +3,9 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === -// === /a.ts === --// interface [|Foo|] { +-// <|interface [|Foo|] { -// foo: E.Foo; --// } +-// }|> - // === /b.ts === // enum E { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc index 6668a2f281..60430dbaa3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionPropertyAccessExpressionHeritageClause.baseline.jsonc @@ -2,7 +2,7 @@ // === /gotoDefinitionPropertyAccessExpressionHeritageClause.ts === // class B {} // function foo() { -// return {[|B|]: B}; +// return {<|[|B|]: B|>}; // } // class C extends (foo())./*GOTO DEF*/B {} // class C1 extends foo().B {} @@ -13,7 +13,7 @@ // === /gotoDefinitionPropertyAccessExpressionHeritageClause.ts === // class B {} // function foo() { -// return {[|B|]: B}; +// return {<|[|B|]: B|>}; // } // class C extends (foo()).B {} // class C1 extends foo()./*GOTO DEF*/B {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc index fe2c444c99..02adcabe0a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionSatisfiesTag.baseline.jsonc @@ -1,9 +1,9 @@ // === goToDefinition === // === /a.js === // /** -// * @typedef {Object} [|T|] +// * <|@typedef {Object} [|T|] // * @property {number} a -// */ +// |>*/ // // /** @satisfies {/*GOTO DEF*/T} comment */ // const foo = { a: 1 }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff index 97d5f126e9..73153c68eb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/gotoDefinitionThrowsTag.baseline.jsonc.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ // === goToDefinition === // === /gotoDefinitionThrowsTag.ts === --// class [|E|] extends Error {} +-// <|class [|E|] extends Error {}|> +// class E extends Error {} // // /** diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc index 9451561245..a2af97f37e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/importTypeNodeGoToDefinition.baseline.jsonc @@ -14,11 +14,11 @@ // === goToDefinition === // === /ns.ts === -// export namespace [|Foo|] { +// <|export namespace [|Foo|] { // export namespace Bar { // export class Baz {} // } -// } +// }|> // === /usage.ts === // type A = typeof import("./ns")./*GOTO DEF*/[|Foo|].Bar; @@ -29,9 +29,9 @@ // === goToDefinition === // === /ns.ts === // export namespace Foo { -// export namespace [|Bar|] { +// <|export namespace [|Bar|] { // export class Baz {} -// } +// }|> // } // === /usage.ts === @@ -56,11 +56,11 @@ // === goToDefinition === // === /ns.ts === -// export namespace [|Foo|] { +// <|export namespace [|Foo|] { // export namespace Bar { // export class Baz {} // } -// } +// }|> // === /usage.ts === // type A = typeof import("./ns").Foo.Bar; @@ -71,9 +71,9 @@ // === goToDefinition === // === /ns.ts === // export namespace Foo { -// export namespace [|Bar|] { +// <|export namespace [|Bar|] { // export class Baz {} -// } +// }|> // } // === /usage.ts === @@ -86,7 +86,7 @@ // === /ns.ts === // export namespace Foo { // export namespace Bar { -// export class [|Baz|] {} +// <|export class [|Baz|] {}|> // } // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc index f5b02f0b67..ffc0ce4ff5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/javaScriptClass3.baseline.jsonc @@ -2,7 +2,7 @@ // === /Foo.js === // class Foo { // constructor() { -// this.[|alpha|] = 10; +// <|this.[|alpha|] = 10;|> // this.beta = 'gamma'; // } // method() { return this.alpha; } @@ -18,7 +18,7 @@ // class Foo { // constructor() { // this.alpha = 10; -// this.[|beta|] = 'gamma'; +// <|this.[|beta|] = 'gamma';|> // } // method() { return this.alpha; } // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc index 3d145e543a..2e7827cef3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /jsDocSee1.ts === -// interface [|Foo|] { +// <|interface [|Foo|] { // foo: string -// } +// }|> // namespace NS { // export interface Bar { // baz: Foo @@ -22,9 +22,9 @@ // foo: string // } // namespace NS { -// export interface [|Bar|] { +// <|export interface [|Bar|] { // baz: Foo -// } +// }|> // } // /** @see {Foo} foooo*/ // const a = "" @@ -38,13 +38,15 @@ // === goToDefinition === // === /jsDocSee1.ts === -// interface [|Foo|] { +// <|interface [|Foo|] { // foo: string -// } +// }|> // namespace NS { -// --- (line: 5) skipped --- - -// --- (line: 9) skipped --- +// export interface Bar { +// baz: Foo +// } +// } +// /** @see {Foo} foooo*/ // const a = "" // /** @see {NS.Bar} ns.bar*/ // const b = "" @@ -63,9 +65,9 @@ // foo: string // } // namespace NS { -// export interface [|Bar|] { +// <|export interface [|Bar|] { // baz: Foo -// } +// }|> // } // /** @see {Foo} foooo*/ // const a = "" @@ -86,6 +88,6 @@ // /** @see Foo f1*/ // const c = "" // /** @see NS.Bar ns.bar*/ -// const [|d|] = "" +// <|const [|d|] = ""|> // /** @see /*GOTO DEF*/d dd*/ // const e = "" \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff deleted file mode 100644 index 217dc23c0f..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee1.baseline.jsonc.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- old.jsDocSee1.baseline.jsonc -+++ new.jsDocSee1.baseline.jsonc -@@= skipped -41, +41 lines =@@ - // foo: string - // } - // namespace NS { --// export interface Bar { --// baz: Foo --// } --// } --// /** @see {Foo} foooo*/ -+// --- (line: 5) skipped --- -+ -+// --- (line: 9) skipped --- - // const a = "" - // /** @see {NS.Bar} ns.bar*/ - // const b = "" \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc index 73f64095e1..f0d3cd5651 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee2.baseline.jsonc @@ -54,7 +54,7 @@ // /** @see foooo unknown reference without brace*/ // const c = "" // /** @see @bar invalid tag without brace*/ -// const [|d|] = "" +// <|const [|d|] = ""|> // /** @see {/*GOTO DEF*/d@fff} partial reference */ // const e = "" // /** @see @@@@@@ total invalid tag*/ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc index 61fab7b010..a65f8d9cfa 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc @@ -1,6 +1,6 @@ // === goToDefinition === // === /jsDocSee3.ts === -// function foo ([|a|]: string) { +// function foo (<|[|a|]: string|>) { // /** // * @see {/*GOTO DEF*/a} // */ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff index 834e2f1938..187b73e9c3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee3.baseline.jsonc.diff @@ -4,11 +4,11 @@ // === goToDefinition === // === /jsDocSee3.ts === -// function foo (a: string) { -+// function foo ([|a|]: string) { ++// function foo (<|[|a|]: string|>) { // /** // * @see {/*GOTO DEF*/a} // */ --// function bar ([|a|]: string) { +-// function bar (<|[|a|]: string|>) { +// function bar (a: string) { // } // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc index 3238d2c2a0..b26c03088b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsDocSee4.baseline.jsonc @@ -1,8 +1,8 @@ // === goToDefinition === // === /jsDocSee4.ts === -// class [|A|] { +// <|class [|A|] { // foo () { } -// } +// }|> // declare const a: A; // /** // * @see {/*GOTO DEF*/A#foo} @@ -18,7 +18,7 @@ // class A { // foo () { } // } -// declare const [|a|]: A; +// <|declare const [|a|]: A;|> // /** // * @see {A#foo} // */ @@ -37,7 +37,7 @@ // class A { // foo () { } // } -// declare const [|a|]: A; +// <|declare const [|a|]: A;|> // /** // * @see {A#foo} // */ diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc index 629dad64b0..d580472139 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/jsxSpreadReference.baseline.jsonc @@ -4,5 +4,5 @@ // } // } // -// var [|nn|]: {name?: string; size?: number}; +// <|var [|nn|]: {name?: string; size?: number};|> // var x = ; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc index 666ce55bd3..e3888c240f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc @@ -1,7 +1,7 @@ // === goToDefinition === // === /qualifiedName_import_declaration_with_variable_entity_names.ts === // module Alpha { -// export var [|x|] = 100; +// <|export var [|x|] = 100;|> // } // // module Beta { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff index 0ba07fa433..226074606c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/qualifiedName_import_declaration_with_variable_entity_names.baseline.jsonc.diff @@ -4,7 +4,7 @@ +// === goToDefinition === +// === /qualifiedName_import_declaration_with_variable_entity_names.ts === +// module Alpha { -+// export var [|x|] = 100; ++// <|export var [|x|] = 100;|> +// } +// +// module Beta { diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc index a9cce6e7ca..d1b9caf333 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc @@ -1,7 +1,583708 @@ // === goToDefinition === // === /file.d.ts === -// namespace /*GOTO DEF*/[|Foo|] { +// <|namespace /*GOTO DEF*/[|Foo|] { // // // -// --- (line: 5) skipped --- \ No newline at end of file +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// //// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// //// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// //// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// //// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// //// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff deleted file mode 100644 index 731ad9f4e4..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/reallyLargeFile.baseline.jsonc.diff +++ /dev/null @@ -1,583709 +0,0 @@ ---- old.reallyLargeFile.baseline.jsonc -+++ new.reallyLargeFile.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // - // - // --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// //// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// //// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// //// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// //// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// //// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// --// } -+// --- (line: 5) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc index 019d208f03..e4aca3c69d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionClasses.baseline.jsonc @@ -5,11 +5,11 @@ // interface IntrinsicElements { } // interface ElementAttributesProperty { props; } // } -// class [|MyClass|] { +// <|class [|MyClass|] { // props: { // foo: string; // } -// } +// }|> // var x = ; // var y = ; // var z = ; @@ -22,7 +22,7 @@ // } // class MyClass { // props: { -// [|foo|]: string; +// <|[|foo|]: string;|> // } // } // var x = ; @@ -38,11 +38,11 @@ // interface IntrinsicElements { } // interface ElementAttributesProperty { props; } // } -// class [|MyClass|] { +// <|class [|MyClass|] { // props: { // foo: string; // } -// } +// }|> // var x = ; // var y = ; // var z = ; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc index 5d4c9efa4e..21e1030234 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionIntrinsics.baseline.jsonc @@ -3,10 +3,10 @@ // declare module JSX { // interface Element { } // interface IntrinsicElements { -// [|div|]: { +// <|[|div|]: { // name?: string; // isOpen?: boolean; -// }; +// };|> // span: { n: string; }; // } // } @@ -22,7 +22,7 @@ // name?: string; // isOpen?: boolean; // }; -// [|span|]: { n: string; }; +// <|[|span|]: { n: string; };|> // } // } // var x =
; @@ -37,7 +37,7 @@ // interface Element { } // interface IntrinsicElements { // div: { -// [|name|]?: string; +// <|[|name|]?: string;|> // isOpen?: boolean; // }; // span: { n: string; }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc index 49f1432f83..f718d0fbfb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction1.baseline.jsonc @@ -4,7 +4,7 @@ // propString: "hell" // optional?: boolean // } -// declare function [|Opt|](attributes: OptionPropBag): JSX.Element; +// <|declare function [|Opt|](attributes: OptionPropBag): JSX.Element;|> // let opt = ; // let opt1 = ; // let opt2 = ; @@ -18,7 +18,7 @@ // propString: "hell" // optional?: boolean // } -// declare function [|Opt|](attributes: OptionPropBag): JSX.Element; +// <|declare function [|Opt|](attributes: OptionPropBag): JSX.Element;|> // let opt = ; // let opt1 = ; // let opt2 = ; @@ -32,7 +32,7 @@ // propString: "hell" // optional?: boolean // } -// declare function [|Opt|](attributes: OptionPropBag): JSX.Element; +// <|declare function [|Opt|](attributes: OptionPropBag): JSX.Element;|> // let opt = ; // let opt1 = ; // let opt2 = ; @@ -46,7 +46,7 @@ // propString: "hell" // optional?: boolean // } -// declare function [|Opt|](attributes: OptionPropBag): JSX.Element; +// <|declare function [|Opt|](attributes: OptionPropBag): JSX.Element;|> // let opt = ; // let opt1 = ; // let opt2 = ; @@ -60,7 +60,7 @@ // interface ElementAttributesProperty { props; } // } // interface OptionPropBag { -// [|propx|]: number +// <|[|propx|]: number|> // propString: "hell" // optional?: boolean // } @@ -78,7 +78,7 @@ // interface OptionPropBag { // propx: number // propString: "hell" -// [|optional|]?: boolean +// <|[|optional|]?: boolean|> // } // declare function Opt(attributes: OptionPropBag): JSX.Element; // let opt = ; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc index 86067d8aaf..3645ccd8eb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionStatelessFunction2.baseline.jsonc @@ -4,7 +4,7 @@ // interface LinkProps extends ClickableProps { // goTo: string; // } -// declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element; +// <|declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element;|> // declare function MainButton(linkProps: LinkProps): JSX.Element; // declare function MainButton(props: ButtonProps | LinkProps): JSX.Element; // let opt =
; @@ -22,7 +22,7 @@ // interface LinkProps extends ClickableProps { // goTo: string; // } -// declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element; +// <|declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element;|> // declare function MainButton(linkProps: LinkProps): JSX.Element; // declare function MainButton(props: ButtonProps | LinkProps): JSX.Element; // let opt = ; @@ -40,7 +40,7 @@ // interface LinkProps extends ClickableProps { // goTo: string; // } -// declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element; +// <|declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element;|> // declare function MainButton(linkProps: LinkProps): JSX.Element; // declare function MainButton(props: ButtonProps | LinkProps): JSX.Element; // let opt = ; @@ -58,7 +58,7 @@ // interface LinkProps extends ClickableProps { // goTo: string; // } -// declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element; +// <|declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element;|> // declare function MainButton(linkProps: LinkProps): JSX.Element; // declare function MainButton(props: ButtonProps | LinkProps): JSX.Element; // let opt = ; @@ -76,7 +76,7 @@ // goTo: string; // } // declare function MainButton(buttonProps: ButtonProps): JSX.Element; -// declare function [|MainButton|](linkProps: LinkProps): JSX.Element; +// <|declare function [|MainButton|](linkProps: LinkProps): JSX.Element;|> // declare function MainButton(props: ButtonProps | LinkProps): JSX.Element; // let opt = ; // let opt = ; @@ -93,7 +93,7 @@ // interface LinkProps extends ClickableProps { // goTo: string; // } -// declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element; +// <|declare function [|MainButton|](buttonProps: ButtonProps): JSX.Element;|> // declare function MainButton(linkProps: LinkProps): JSX.Element; // declare function MainButton(props: ButtonProps | LinkProps): JSX.Element; // let opt = ; diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc index 4ed459649f..12a9448ce0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType1.baseline.jsonc @@ -4,11 +4,11 @@ // } // interface ElementAttributesProperty { props; } // } -// function [|SFC1|](prop: { x: number }) { +// <|function [|SFC1|](prop: { x: number }) { // return
hello
; -// }; +// }|>; // function SFC2(prop: { x: boolean }) { // return

World

; // } -// var [|SFCComp|] = SFC1 || SFC2; +// <|var [|SFCComp|] = SFC1 || SFC2;|> // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc index aea57bc6f9..424423184c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToDefinition/tsxGoToDefinitionUnionElementType2.baseline.jsonc @@ -4,5 +4,5 @@ // } // private method() { } // } -// var [|RCComp|] = RC1 || RC2; +// <|var [|RCComp|] = RC1 || RC2;|> // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc index 46695f64be..c43b4aa41a 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_00.baseline.jsonc @@ -1,7 +1,7 @@ // === goToImplementation === // === /goToImplementationClassMethod_00.ts === // class Bar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // new Bar().hel/*GOTO IMPL*/lo; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc index 80db702094..c3f5695557 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationClassMethod_01.baseline.jsonc @@ -5,7 +5,7 @@ // } // // class Bar extends AbstractBar{ -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // function whatever(x: AbstractBar) { @@ -21,7 +21,7 @@ // } // // class Bar extends AbstractBar{ -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // function whatever(x: AbstractBar) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc index 4ca595865c..516246cec9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_00.baseline.jsonc @@ -1,7 +1,7 @@ // === goToImplementation === // === /goToImplementationEnum_00.ts === // enum Foo { -// [|Foo1|] = function initializer() { return 5 } (), +// <|[|Foo1|] = function initializer() { return 5 } ()|>, // Foo2 = 6 // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc index 3fba1d4a17..049bc482eb 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationEnum_01.baseline.jsonc @@ -1,8 +1,8 @@ // === goToImplementation === // === /goToImplementationEnum_01.ts === -// enum [|Foo|] { +// <|enum [|Foo|] { // Foo1 = function initializer() { return 5 } (), // Foo2 = 6 -// } +// }|> // // Fo/*GOTO IMPL*/o; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc index c509d17b99..446162cd13 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_00.baseline.jsonc @@ -4,19 +4,19 @@ // hello: () => void // } // -// var bar: Foo = { [|hello|]: helloImpl }; -// var baz: Foo = { "[|hello|]": helloImpl }; +// var bar: Foo = { <|[|hello|]: helloImpl|> }; +// var baz: Foo = { <|"[|hello|]": helloImpl|> }; // // function helloImpl () {} // -// function whatever(x: Foo = { [|hello|]() {/**1*/} }) { +// function whatever(x: Foo = { <|[|hello|]() {/**1*/}|> }) { // x.he/*GOTO IMPL*/llo() // } // // class Bar { -// x: Foo = { [|hello|]() {} } +// x: Foo = { <|[|hello|]() {}|> } // -// constructor(public f: Foo = { [|hello|]() {/**3*/} } ) {} +// constructor(public f: Foo = { <|[|hello|]() {/**3*/}|> } ) {} // } @@ -27,17 +27,17 @@ // he/*GOTO IMPL*/llo: () => void // } // -// var bar: Foo = { [|hello|]: helloImpl }; -// var baz: Foo = { "[|hello|]": helloImpl }; +// var bar: Foo = { <|[|hello|]: helloImpl|> }; +// var baz: Foo = { <|"[|hello|]": helloImpl|> }; // // function helloImpl () {} // -// function whatever(x: Foo = { [|hello|]() {/**1*/} }) { +// function whatever(x: Foo = { <|[|hello|]() {/**1*/}|> }) { // x.hello() // } // // class Bar { -// x: Foo = { [|hello|]() {} } +// x: Foo = { <|[|hello|]() {}|> } // -// constructor(public f: Foo = { [|hello|]() {/**3*/} } ) {} +// constructor(public f: Foo = { <|[|hello|]() {/**3*/}|> } ) {} // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc index 70accb72a6..65e8a41cf4 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_01.baseline.jsonc @@ -4,7 +4,7 @@ // } // // class Bar implements Foo { -// [|hello|]() {} +// <|[|hello|]() {}|> // public sure() {} // } // @@ -24,7 +24,7 @@ // } // // class Bar implements Foo { -// [|hello|]() {} +// <|[|hello|]() {}|> // public sure() {} // } // diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc index 55f313a23f..7e923164af 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_02.baseline.jsonc @@ -4,7 +4,7 @@ // } // // class Bar extends AbstractBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // function whatever(a: AbstractBar) { @@ -24,7 +24,7 @@ // } // // class Bar extends AbstractBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // function whatever(a: AbstractBar) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc index 1393f52c5a..24280043f0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_03.baseline.jsonc @@ -5,7 +5,7 @@ // } // // class Bar extends SuperBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class SuperBar implements Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc index 3c49763b65..bbf170ff05 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_04.baseline.jsonc @@ -5,11 +5,11 @@ // } // // class Bar extends SuperBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class SuperBar implements Foo { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class OtherBar implements Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc index 4be8b989f8..59ef204086 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc @@ -5,7 +5,7 @@ // } // // class SuperBar implements Foo { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class Bar extends SuperBar { @@ -13,7 +13,7 @@ // } // // class OtherBar extends SuperBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // hello2() {} // hello3() {} // } @@ -23,7 +23,7 @@ // } // // class NotBar extends SuperBar { -// [|hello|]() {} // Should not be returned because it is not structurally equivalent to Bar +// <|[|hello|]() {}|> // Should not be returned because it is not structurally equivalent to Bar // } // // function whatever(x: Bar) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff index c768d4906e..a0de8ad32d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_05.baseline.jsonc.diff @@ -9,7 +9,7 @@ +// } +// +// class OtherBar extends SuperBar { -+// [|hello|]() {} ++// <|[|hello|]() {}|> +// hello2() {} +// hello3() {} +// } @@ -20,7 +20,7 @@ +// } +// +// class NotBar extends SuperBar { -+// [|hello|]() {} // Should not be returned because it is not structurally equivalent to Bar ++// <|[|hello|]() {}|> // Should not be returned because it is not structurally equivalent to Bar // } // // function whatever(x: Bar) { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc index e9ea996134..5afee41c5f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc @@ -4,24 +4,24 @@ // } // // class Bar implements Foo { -// [|hello|]() {} +// <|[|hello|]() {}|> // someOtherFunction() {} // } // // function createFoo(): Foo { // return { -// [|hello|]() {}, +// <|[|hello|]() {}|>, // someOtherFunction() {} // }; // } // // var y: Foo = { -// [|hello|]() {}, +// <|[|hello|]() {}|>, // someOtherFunction() {} // }; // // class FooLike implements SuperFoo { -// [|hello|]() {} +// <|[|hello|]() {}|> // someOtherFunction() {} // } // @@ -31,7 +31,7 @@ // } // // class NotFoo implements SuperFoo { -// [|hello|]() {} // We only want implementations of Foo, even though the function is declared in SuperFoo +// <|[|hello|]() {}|> // We only want implementations of Foo, even though the function is declared in SuperFoo // } // // function (x: Foo) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff index 48305c1233..0560268a52 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_06.baseline.jsonc.diff @@ -8,7 +8,7 @@ - -// --- (line: 37) skipped --- +// class FooLike implements SuperFoo { -+// [|hello|]() {} ++// <|[|hello|]() {}|> +// someOtherFunction() {} +// } +// @@ -18,7 +18,7 @@ +// } +// +// class NotFoo implements SuperFoo { -+// [|hello|]() {} // We only want implementations of Foo, even though the function is declared in SuperFoo ++// <|[|hello|]() {}|> // We only want implementations of Foo, even though the function is declared in SuperFoo // } // // function (x: Foo) { \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc index 68ba2c42fb..9273bb9bf8 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_08.baseline.jsonc @@ -5,7 +5,7 @@ // } // // class SuperBar implements Foo { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class Bar extends SuperBar { @@ -13,5 +13,5 @@ // } // // class SubBar extends Bar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc index 7fff307c0d..0c4bf1cebf 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc @@ -5,11 +5,11 @@ // } // // class SubBar extends Bar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class Bar extends SuperBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // // whatever() { // super.he/*GOTO IMPL*/llo(); @@ -18,7 +18,7 @@ // } // // class SuperBar extends MegaBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class MegaBar implements Foo { @@ -34,11 +34,11 @@ // } // // class SubBar extends Bar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class Bar extends SuperBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // // whatever() { // super.hello(); @@ -47,7 +47,7 @@ // } // // class SuperBar extends MegaBar { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // class MegaBar implements Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff index d9fcbf78db..139109bfbd 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_09.baseline.jsonc.diff @@ -10,11 +10,11 @@ +// } +// +// class SubBar extends Bar { -+// [|hello|]() {} ++// <|[|hello|]() {}|> +// } +// +// class Bar extends SuperBar { -+// [|hello|]() {} ++// <|[|hello|]() {}|> // // whatever() { // super.he/*GOTO IMPL*/llo(); @@ -28,11 +28,11 @@ +// } +// +// class SubBar extends Bar { -+// [|hello|]() {} ++// <|[|hello|]() {}|> +// } +// +// class Bar extends SuperBar { -+// [|hello|]() {} ++// <|[|hello|]() {}|> // // whatever() { // super.hello(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc index 54150affbc..72f717e2e0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_10.baseline.jsonc @@ -4,7 +4,7 @@ // } // // class FooImpl implements Foo { -// [|hello|]() {/**FooImpl*/} +// <|[|hello|]() {/**FooImpl*/}|> // aloha() {} // } // @@ -13,12 +13,12 @@ // } // // class BarImpl implements Bar { -// [|hello|]() {/**BarImpl*/} +// <|[|hello|]() {/**BarImpl*/}|> // goodbye() {} // } // // class FooAndBarImpl implements Foo, Bar { -// [|hello|]() {/**FooAndBarImpl*/} +// <|[|hello|]() {/**FooAndBarImpl*/}|> // aloha() {} // goodbye() {} // } @@ -39,7 +39,7 @@ // } // // class FooImpl implements Foo { -// [|hello|]() {/**FooImpl*/} +// <|[|hello|]() {/**FooImpl*/}|> // aloha() {} // } // @@ -48,12 +48,12 @@ // } // // class BarImpl implements Bar { -// [|hello|]() {/**BarImpl*/} +// <|[|hello|]() {/**BarImpl*/}|> // goodbye() {} // } // // class FooAndBarImpl implements Foo, Bar { -// [|hello|]() {/**FooAndBarImpl*/} +// <|[|hello|]() {/**FooAndBarImpl*/}|> // aloha() {} // goodbye() {} // } diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc index 83fb7cbf2f..e3cefabb01 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceMethod_11.baseline.jsonc @@ -4,5 +4,5 @@ // hel/*GOTO IMPL*/lo(): void; // } // -// var x = { [|hello|]: () => {} }; -// var y = (((({ [|hello|]: () => {} })))); \ No newline at end of file +// var x = { <|[|hello|]: () => {}|> }; +// var y = (((({ <|[|hello|]: () => {}|> })))); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc index aee255e673..86df839ee7 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_00.baseline.jsonc @@ -4,15 +4,15 @@ // hello: number // } // -// var bar: Foo = { [|hello|]: 5 }; +// var bar: Foo = { <|[|hello|]: 5|> }; // // -// function whatever(x: Foo = { [|hello|]: 5 * 9 }) { +// function whatever(x: Foo = { <|[|hello|]: 5 * 9|> }) { // x.he/*GOTO IMPL*/llo // } // // class Bar { -// x: Foo = { [|hello|]: 6 } +// x: Foo = { <|[|hello|]: 6|> } // -// constructor(public f: Foo = { [|hello|]: 7 } ) {} +// constructor(public f: Foo = { <|[|hello|]: 7|> } ) {} // } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc index b6ba56d904..b90188fac2 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterfaceProperty_01.baseline.jsonc @@ -3,7 +3,7 @@ // interface Foo { hello: number } // // class Bar implements Foo { -// [|hello|] = 5 * 9; +// <|[|hello|] = 5 * 9;|> // } // // function whatever(foo: Foo) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc index 90dfe6451e..680afdd169 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc @@ -4,7 +4,7 @@ // hello: () => void // } // -// interface [|Baz|] extends Foo {} +// <|interface [|Baz|] extends Foo {}|> // // var bar: Foo = { hello: helloImpl /**0*/ }; // var baz: Foo[] = [{ hello: helloImpl /**4*/ }]; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff index 43f53d9fe8..b0a2afd976 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_00.baseline.jsonc.diff @@ -2,7 +2,7 @@ +++ new.goToImplementationInterface_00.baseline.jsonc @@= skipped -5, +5 lines =@@ // - // interface [|Baz|] extends Foo {} + // <|interface [|Baz|] extends Foo {}|> // -// var bar: Foo = [|{ hello: helloImpl /**0*/ }|]; -// var baz: Foo[] = [|[{ hello: helloImpl /**4*/ }]|]; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc index b2c3c131a4..1d74864617 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc @@ -2,19 +2,21 @@ // === /goToImplementationInterface_01.ts === // interface Fo/*GOTO IMPL*/o { hello(): void } // -// class [|SuperBar|] implements Foo { +// <|class [|SuperBar|] implements Foo { // hello () {} -// } +// }|> // -// abstract class [|AbstractBar|] implements Foo { +// <|abstract class [|AbstractBar|] implements Foo { // abstract hello (): void; -// } +// }|> // -// class [|Bar|] extends SuperBar { -// } +// <|class [|Bar|] extends SuperBar { +// }|> // -// class [|NotAbstractBar|] extends AbstractBar { +// <|class [|NotAbstractBar|] extends AbstractBar { // hello () {} -// } +// }|> // -// --- (line: 18) skipped --- \ No newline at end of file +// var x = new SuperBar(); +// var y: SuperBar = new SuperBar(); +// var z: AbstractBar = new NotAbstractBar(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff deleted file mode 100644 index e817a99afa..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_01.baseline.jsonc.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- old.goToImplementationInterface_01.baseline.jsonc -+++ new.goToImplementationInterface_01.baseline.jsonc -@@= skipped -16, +16 lines =@@ - // hello () {} - // } - // --// var x = new SuperBar(); --// var y: SuperBar = new SuperBar(); --// var z: AbstractBar = new NotAbstractBar(); -+// --- (line: 18) skipped --- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc index 797bd86e33..f61830d24f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc @@ -17,7 +17,7 @@ // let x8: Foo[] = [{ hello () { /**arrayType*/} }]; // let x9: { y: Foo } = { y: { hello () { /**typeLiteral*/} } }; // let x10 = [|class implements Foo { hello() {} }|] -// let x11 = class [|C|] implements Foo { hello() {} } +// let x11 = <|class [|C|] implements Foo { hello() {} }|> // // // Should not do anything for type predicates // function isFoo(a: any): a is Foo { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff index ac025f8f5e..b6d1464da0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_07.baseline.jsonc.diff @@ -29,5 +29,5 @@ +// let x8: Foo[] = [{ hello () { /**arrayType*/} }]; +// let x9: { y: Foo } = { y: { hello () { /**typeLiteral*/} } }; // let x10 = [|class implements Foo { hello() {} }|] - // let x11 = class [|C|] implements Foo { hello() {} } + // let x11 = <|class [|C|] implements Foo { hello() {} }|> // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc index 3aee1fbc76..8546f99996 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_08.baseline.jsonc @@ -4,7 +4,7 @@ // interface C extends B, A {} // // class X implements B { -// [|hello|]() {} +// <|[|hello|]() {}|> // } // // function someFunction(d : A) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc index f4361a3a48..dd7600197d 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationInterface_10.baseline.jsonc @@ -3,11 +3,11 @@ // interface /*GOTO IMPL*/A { // foo: boolean; // } -// interface [|B|] extends A { +// <|interface [|B|] extends A { // bar: boolean; -// } -// export class [|C|] implements B { +// }|> +// <|export class [|C|] implements B { // foo = true; // bar = true; -// } -// export class [|D|] extends C { } \ No newline at end of file +// }|> +// <|export class [|D|] extends C { }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc index 9cbc1f6e51..aa4d098415 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_00.baseline.jsonc @@ -1,4 +1,4 @@ // === goToImplementation === // === /goToImplementationLocal_00.ts === // he/*GOTO IMPL*/llo(); -// function [|hello|]() {} \ No newline at end of file +// <|function [|hello|]() {}|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc index 19cd1cf5e8..5a14a790a5 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_01.baseline.jsonc @@ -1,4 +1,4 @@ // === goToImplementation === // === /goToImplementationLocal_01.ts === -// const [|hello|] = function() {}; +// <|const [|hello|] = function() {};|> // he/*GOTO IMPL*/llo(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc index 4cde3736a8..dfba753153 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_02.baseline.jsonc @@ -1,6 +1,6 @@ // === goToImplementation === // === /goToImplementationLocal_02.ts === -// const x = { [|hello|]: () => {} }; +// const x = { <|[|hello|]: () => {}|> }; // // x.he/*GOTO IMPL*/llo(); // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc index 4bff0bddbb..dd1f5a6cd9 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_03.baseline.jsonc @@ -1,6 +1,6 @@ // === goToImplementation === // === /goToImplementationLocal_03.ts === -// let [|he/*GOTO IMPL*/llo|] = {}; +// <|let [|he/*GOTO IMPL*/llo|] = {};|> // // x.hello(); // diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc index 82c8111e01..44322b2c0b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_04.baseline.jsonc @@ -1,6 +1,6 @@ // === goToImplementation === // === /goToImplementationLocal_04.ts === -// function [|he/*GOTO IMPL*/llo|]() {} +// <|function [|he/*GOTO IMPL*/llo|]() {}|> // // hello(); // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc index 7963b26309..1ef8909739 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_05.baseline.jsonc @@ -4,5 +4,5 @@ // public hello() {} // } // -// var [|someVar|] = new Bar(); +// <|var [|someVar|] = new Bar();|> // someVa/*GOTO IMPL*/r.hello(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc index 90b6857636..5d2cd97718 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_06.baseline.jsonc @@ -1,4 +1,4 @@ // === goToImplementation === // === /goToImplementationLocal_06.ts === -// declare var [|someVar|]: string; +// <|declare var [|someVar|]: string;|> // someVa/*GOTO IMPL*/r \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc index a37609c4f0..824a9fc8a7 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_07.baseline.jsonc @@ -1,4 +1,4 @@ // === goToImplementation === // === /goToImplementationLocal_07.ts === -// declare function [|someFunction|](): () => void; +// <|declare function [|someFunction|](): () => void;|> // someFun/*GOTO IMPL*/ction(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc index e70a13b9c7..891eb65112 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationLocal_08.baseline.jsonc @@ -1,4 +1,4 @@ // === goToImplementation === // === /goToImplementationLocal_08.ts === -// declare function [|someFunction|](): () => void; +// <|declare function [|someFunction|](): () => void;|> // someFun/*GOTO IMPL*/ction(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc index a66baa42cb..aaa8cc7c05 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_00.baseline.jsonc @@ -1,8 +1,8 @@ // === goToImplementation === // === /goToImplementationNamespace_00.ts === -// namespace [|Foo|] { +// <|namespace [|Foo|] { // export function hello() {} -// } +// }|> // // module Bar { // export function sure() {} @@ -19,9 +19,9 @@ // export function hello() {} // } // -// module [|Bar|] { +// <|module [|Bar|] { // export function sure() {} -// } +// }|> // // let x = Foo; // let y = Ba/*GOTO IMPL*/r; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc index bb3b20529d..1d83bc7257 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_01.baseline.jsonc @@ -1,7 +1,7 @@ // === goToImplementation === // === /goToImplementationNamespace_01.ts === // namespace Foo { -// export function [|hello|]() {} +// <|export function [|hello|]() {}|> // } // // Foo.hell/*GOTO IMPL*/o(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc index 30ad833dd8..e377619b3c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_02.baseline.jsonc @@ -1,7 +1,7 @@ // === goToImplementation === // === /goToImplementationNamespace_02.ts === // module Foo { -// export function [|hello|]() {} +// <|export function [|hello|]() {}|> // } // // Foo.hell/*GOTO IMPL*/o(); \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc index db144921f9..27af73fa79 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc @@ -5,14 +5,14 @@ // hello(): void; // } // -// class [|BarImpl|] implements Bar { +// <|class [|BarImpl|] implements Bar { // hello() {} -// } +// }|> // } // -// class [|Baz|] implements Foo.Bar { +// <|class [|Baz|] implements Foo.Bar { // hello() {} -// } +// }|> // // var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; // diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff index 6b1e90b143..9702bc65fa 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_03.baseline.jsonc.diff @@ -2,7 +2,7 @@ +++ new.goToImplementationNamespace_03.baseline.jsonc @@= skipped -13, +13 lines =@@ // hello() {} - // } + // }|> // -// var someVar1 : Foo.Bar = [|{ hello: () => {/**1*/} }|]; +// var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc index 1863515b61..a175357783 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc @@ -5,14 +5,14 @@ // hello(): void; // } // -// class [|BarImpl|] implements Bar { +// <|class [|BarImpl|] implements Bar { // hello() {} -// } +// }|> // } // -// class [|Baz|] implements Foo.Bar { +// <|class [|Baz|] implements Foo.Bar { // hello() {} -// } +// }|> // // var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; // diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff index c92414e7d3..586b42874b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_04.baseline.jsonc.diff @@ -2,7 +2,7 @@ +++ new.goToImplementationNamespace_04.baseline.jsonc @@= skipped -13, +13 lines =@@ // hello() {} - // } + // }|> // -// var someVar1 : Foo.Bar = [|{ hello: () => {/**1*/} }|]; +// var someVar1 : Foo.Bar = { hello: () => {/**1*/} }; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc index d9cba3c872..f94e85ab5c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc @@ -1,8 +1,8 @@ // === goToImplementation === // === /goToImplementationNamespace_05.ts === -// namespace [|Foo|].Baz { +// <|namespace [|Foo|].Baz { // export function hello() {} -// } +// }|> // // module Bar.Baz { // export function sure() {} @@ -21,9 +21,9 @@ // export function hello() {} // } // -// module [|Bar|].Baz { +// <|module [|Bar|].Baz { // export function sure() {} -// } +// }|> // // let x = Foo; // let y = Ba/*GOTO IMPL*/r; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff index f2c9d8c9f5..7ccad68d89 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_05.baseline.jsonc.diff @@ -4,9 +4,9 @@ // === goToImplementation === // === /goToImplementationNamespace_05.ts === --// namespace Foo.[|Baz|] { +-// namespace Foo.<|[|Baz|] { -// export function hello() {} --// } +-// }|> -// -// module Bar.Baz { -// export function sure() {} @@ -23,9 +23,9 @@ -// export function hello() {} -// } -// --// module Bar.[|Baz|] { +-// module Bar.<|[|Baz|] { -// export function sure() {} --// } +-// }|> -// +// --- (line: 8) skipped --- // let x = Foo; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc index a507004759..a9dc683f1b 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc @@ -1,8 +1,8 @@ // === goToImplementation === // === /goToImplementationNamespace_06.ts === -// namespace [|F/*GOTO IMPL*/oo|] { +// <|namespace [|F/*GOTO IMPL*/oo|] { // declare function hello(): void; -// } +// }|> // // // let x: typeof Foo = { hello() {} }; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff index 0eb07ca251..1345b3ed6c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationNamespace_06.baseline.jsonc.diff @@ -1,7 +1,7 @@ --- old.goToImplementationNamespace_06.baseline.jsonc +++ new.goToImplementationNamespace_06.baseline.jsonc @@= skipped -4, +4 lines =@@ - // } + // }|> // // -// let x: typeof Foo = [|{ hello() {} }|]; diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc index 98d7f29155..ffb48dc098 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc @@ -4,7 +4,7 @@ // Foo: FooConstructor; // } // -// var x = class [|Foo|] { +// var x = <|class [|Foo|] { // createBarInClassExpression(): Bar { // return { // Fo/*GOTO IMPL*/o @@ -12,13 +12,15 @@ // } // // someFunction() {} -// } +// }|> // -// class [|Foo|] { +// <|class [|Foo|] { // -// } +// }|> // -// --- (line: 27) skipped --- +// function createBarUsingClassDeclaration(): Bar { +// return { +// --- (line: 29) skipped --- @@ -28,7 +30,7 @@ // Foo: FooConstructor; // } // -// var x = class [|Foo|] { +// var x = <|class [|Foo|] { // createBarInClassExpression(): Bar { // return { // Foo @@ -36,11 +38,11 @@ // } // // someFunction() {} -// } +// }|> // -// class [|Foo|] { +// <|class [|Foo|] { // -// } +// }|> // // function createBarUsingClassDeclaration(): Bar { // return { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff index 69eb7824ac..a475b854ef 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_00.baseline.jsonc.diff @@ -2,33 +2,38 @@ +++ new.goToImplementationShorthandPropertyAssignment_00.baseline.jsonc @@= skipped -13, +13 lines =@@ // someFunction() {} - // } + // }|> // -// class Foo { -// -// --- (line: 25) skipped --- -+// class [|Foo|] { ++// <|class [|Foo|] { +// -+// } ++// }|> +// -+// --- (line: 27) skipped --- ++// function createBarUsingClassDeclaration(): Bar { ++// return { ++// --- (line: 29) skipped --- // === goToImplementation === // === /goToImplementationShorthandPropertyAssignment_00.ts === -// --- (line: 19) skipped --- +-// someFunction() {} +// --- (line: 9) skipped --- +// Foo: FooConstructor; -+// } + // } +// -+// var x = class [|Foo|] { ++// var x = <|class [|Foo|] { +// createBarInClassExpression(): Bar { +// return { +// Foo +// }; +// } +// - // someFunction() {} - // } ++// someFunction() {} ++// }|> + // + // <|class [|Foo|] { // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc index 4585dcaea6..7c404e171f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc @@ -4,21 +4,25 @@ // } // // // Class expression that gets used in a bar implementation -// var x = class [|Foo|] { +// var x = <|class [|Foo|] { // createBarInClassExpression(): Bar { // return { // Foo -// --- (line: 18) skipped --- - -// --- (line: 22) skipped --- +// }; +// } +// +// someFunction() {} +// }|>; // // // Class declaration that gets used in a bar implementation. This class has multiple definitions // // (the class declaration and the interface above), but we only want the class returned -// class [|Foo|] { +// <|class [|Foo|] { // -// } +// }|> // -// --- (line: 30) skipped --- +// function createBarUsingClassDeclaration(): Bar { +// return { +// --- (line: 32) skipped --- // --- (line: 37) skipped --- // someFunction() {} diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff deleted file mode 100644 index 2a3ff11400..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_01.baseline.jsonc.diff +++ /dev/null @@ -1,28 +0,0 @@ ---- old.goToImplementationShorthandPropertyAssignment_01.baseline.jsonc -+++ new.goToImplementationShorthandPropertyAssignment_01.baseline.jsonc -@@= skipped -7, +7 lines =@@ - // createBarInClassExpression(): Bar { - // return { - // Foo --// }; --// } --// --// someFunction() {} --// }; -+// --- (line: 18) skipped --- -+ -+// --- (line: 22) skipped --- - // - // // Class declaration that gets used in a bar implementation. This class has multiple definitions - // // (the class declaration and the interface above), but we only want the class returned -@@= skipped -12, +10 lines =@@ - // - // } - // --// function createBarUsingClassDeclaration(): Bar { --// return { --// --- (line: 32) skipped --- -+// --- (line: 30) skipped --- - - // --- (line: 37) skipped --- - // someFunction() {} \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc index 77882ec8a5..b35ea49254 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationShorthandPropertyAssignment_02.baseline.jsonc @@ -4,7 +4,7 @@ // hello // }; // -// function [|hello|]() {} +// <|function [|hello|]() {}|> // } // // function whatever(x: Foo) { diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc index 7d94d31ca4..e2f55a259f 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc @@ -1,11 +1,11 @@ // === goToImplementation === // === /goToImplementationSuper_00.ts === -// class [|Foo|] { +// <|class [|Foo|] { // constructor() {} -// } +// }|> // -// class [|Bar|] extends Foo { +// <|class [|Bar|] extends Foo { // constructor() { // su/*GOTO IMPL*/per(); // } -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff index 53b0888f61..8a2c7984b0 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_00.baseline.jsonc.diff @@ -2,10 +2,12 @@ +++ new.goToImplementationSuper_00.baseline.jsonc @@= skipped -3, +3 lines =@@ // constructor() {} - // } + // }|> // -// class Bar extends Foo { -+// class [|Bar|] extends Foo { ++// <|class [|Bar|] extends Foo { // constructor() { // su/*GOTO IMPL*/per(); - // } \ No newline at end of file + // } +-// } ++// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc index 70e54f4178..954a36221e 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc @@ -1,11 +1,11 @@ // === goToImplementation === // === /goToImplementationSuper_01.ts === -// class [|Foo|] { +// <|class [|Foo|] { // hello() {} -// } +// }|> // -// class [|Bar|] extends Foo { +// <|class [|Bar|] extends Foo { // hello() { // sup/*GOTO IMPL*/er.hello(); // } -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff index ea60e09f88..dc17306129 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationSuper_01.baseline.jsonc.diff @@ -2,10 +2,12 @@ +++ new.goToImplementationSuper_01.baseline.jsonc @@= skipped -3, +3 lines =@@ // hello() {} - // } + // }|> // -// class Bar extends Foo { -+// class [|Bar|] extends Foo { ++// <|class [|Bar|] extends Foo { // hello() { // sup/*GOTO IMPL*/er.hello(); - // } \ No newline at end of file + // } +-// } ++// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc index ee2e163c4c..12f1851217 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_00.baseline.jsonc @@ -1,9 +1,9 @@ // === goToImplementation === // === /goToImplementationThis_00.ts === -// class [|Bar|] extends Foo { +// <|class [|Bar|] extends Foo { // hello() { // thi/*GOTO IMPL*/s.whatever(); // } // // whatever() {} -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc index b261b75f29..e337b41732 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToImplementation/goToImplementationThis_01.baseline.jsonc @@ -1,7 +1,7 @@ // === goToImplementation === // === /goToImplementationThis_01.ts === -// class [|Bar|] extends Foo { +// <|class [|Bar|] extends Foo { // hello(): th/*GOTO IMPL*/is { // return this; // } -// } \ No newline at end of file +// }|> \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc index 1ff73db085..c641ebadb6 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition.baseline.jsonc @@ -1,8 +1,8 @@ // === goToType === // === /goToTypeDefinition_Definition.ts === -// class [|C|] { +// <|class [|C|] { // p; -// } +// }|> // var c: C; // === /goToTypeDefinition_Consumption.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc index 3f56cff912..399aefe3a3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc @@ -1,10 +1,12 @@ // === goToType === // === /goToTypeDefinition2_Definition.ts === -// interface [|I1|] { +// <|interface [|I1|] { // p; -// } +// }|> // type propertyType = I1; -// --- (line: 5) skipped --- +// interface I2 { +// property: propertyType; +// } // === /goToTypeDefinition2_Consumption.ts === // var i2: I2; diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff deleted file mode 100644 index bb21c86720..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition2.baseline.jsonc.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- old.goToTypeDefinition2.baseline.jsonc -+++ new.goToTypeDefinition2.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // p; - // } - // type propertyType = I1; --// interface I2 { --// property: propertyType; --// } -+// --- (line: 5) skipped --- - - // === /goToTypeDefinition2_Consumption.ts === - // var i2: I2; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc index 6067823559..0696d750ac 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition3.baseline.jsonc @@ -1,4 +1,4 @@ // === goToType === // === /goToTypeDefinition3.ts === -// type [|T|] = string; +// <|type [|T|] = string;|> // const x: /*GOTO TYPE*/T; \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc index dd9f252f4b..d89ad2fe68 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionAliases.baseline.jsonc @@ -1,8 +1,8 @@ // === goToType === // === /goToTypeDefinitioAliases_module1.ts === -// interface [|I|] { +// <|interface [|I|] { // p; -// } +// }|> // export {I as I2}; // === /goToTypeDefinitioAliases_module3.ts === @@ -13,9 +13,9 @@ // === goToType === // === /goToTypeDefinitioAliases_module1.ts === -// interface [|I|] { +// <|interface [|I|] { // p; -// } +// }|> // export {I as I2}; // === /goToTypeDefinitioAliases_module3.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc index 0d75f4d2ea..f73cbc8644 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc @@ -1,17 +1,20 @@ // === goToType === // === /bar.d.ts === -// interface [|ImportMeta|] { -// } +// <|interface [|ImportMeta|] { +// }|> // === bundled:///libs/lib.dom.d.ts === // --- (line: --) skipped --- // new(): ImageTrackList; // }; // -// interface [|ImportMeta|] { +// <|interface [|ImportMeta|] { // url: string; // resolve(specifier: string): string; -// } +// }|> +// +// /** +// * The **`InputDeviceInfo`** interface of the Media Capture and Streams API gives access to the capabilities of the input device that it represents. // --- (line: --) skipped --- // @@ -20,10 +23,11 @@ // * If you need to declare that a given property exists on `import.meta`, // * this type may be augmented via interface merging. // */ -// interface [|ImportMeta|] { -// } +// <|interface [|ImportMeta|] { +// }|> // // /** +// * The type for the optional second argument to `import()`. // --- (line: --) skipped --- // diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff index d474a1031d..3186a6a642 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionImportMeta.baseline.jsonc.diff @@ -1,18 +1,21 @@ --- old.goToTypeDefinitionImportMeta.baseline.jsonc +++ new.goToTypeDefinitionImportMeta.baseline.jsonc @@= skipped -2, +2 lines =@@ - // interface [|ImportMeta|] { - // } + // <|interface [|ImportMeta|] { + // }|> +// === lib.dom.d.ts === +// --- (line: --) skipped --- +// new(): ImageTrackList; +// }; +// -+// interface [|ImportMeta|] { ++// <|interface [|ImportMeta|] { +// url: string; +// resolve(specifier: string): string; -+// } ++// }|> ++// ++// /** ++// * The **`InputDeviceInfo`** interface of the Media Capture and Streams API gives access to the capabilities of the input device that it represents. +// --- (line: --) skipped --- +// + @@ -21,10 +24,11 @@ +// * If you need to declare that a given property exists on `import.meta`, +// * this type may be augmented via interface merging. +// */ -+// interface [|ImportMeta|] { -+// } ++// <|interface [|ImportMeta|] { ++// }|> +// +// /** ++// * The type for the optional second argument to `import()`. +// --- (line: --) skipped --- +// + diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc index 6ef4ffde5f..ba51a7ae96 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc @@ -1,20 +1,42 @@ // === goToType === // === /a.ts === -// /*GOTO TYPE*/export class [|A|] { +// /*GOTO TYPE*/<|export class [|A|] { // // private z: string; // -// --- (line: 5) skipped --- +// private y: A; +// +// readonly x: string; +// +// async a() { } +// +// override b() {} +// +// public async c() { } +// }|> +// +// export function foo() { } // === goToType === // === /a.ts === -// export class [|A|]/*GOTO TYPE*/ { +// <|export class [|A|]/*GOTO TYPE*/ { // // private z: string; // -// --- (line: 5) skipped --- +// private y: A; +// +// readonly x: string; +// +// async a() { } +// +// override b() {} +// +// public async c() { } +// }|> +// +// export function foo() { } @@ -44,7 +66,7 @@ // === goToType === // === /a.ts === -// export class [|A|] { +// <|export class [|A|] { // // private z: string; // @@ -52,13 +74,20 @@ // // readonly x: string; // -// --- (line: 9) skipped --- +// async a() { } +// +// override b() {} +// +// public async c() { } +// }|> +// +// export function foo() { } // === goToType === // === /a.ts === -// export class [|A|] { +// <|export class [|A|] { // // private z: string; // @@ -66,7 +95,14 @@ // // readonly x: string; // -// --- (line: 9) skipped --- +// async a() { } +// +// override b() {} +// +// public async c() { } +// }|> +// +// export function foo() { } @@ -104,10 +140,25 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // @@ -130,10 +181,25 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // @@ -186,10 +252,25 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // @@ -211,10 +292,25 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // @@ -236,10 +332,25 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // @@ -261,10 +372,25 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff index f9692c2c03..870d7b9db3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModifiers.baseline.jsonc.diff @@ -1,78 +1,6 @@ --- old.goToTypeDefinitionModifiers.baseline.jsonc +++ new.goToTypeDefinitionModifiers.baseline.jsonc -@@= skipped -3, +3 lines =@@ - // - // private z: string; - // --// private y: A; --// --// readonly x: string; --// --// async a() { } --// --// override b() {} --// --// public async c() { } --// } --// --// export function foo() { } -+// --- (line: 5) skipped --- - - - -@@= skipped -21, +10 lines =@@ - // - // private z: string; - // --// private y: A; --// --// readonly x: string; --// --// async a() { } --// --// override b() {} --// --// public async c() { } --// } --// --// export function foo() { } -+// --- (line: 5) skipped --- - - - -@@= skipped -49, +38 lines =@@ - // - // readonly x: string; - // --// async a() { } --// --// override b() {} --// --// public async c() { } --// } --// --// export function foo() { } -+// --- (line: 9) skipped --- - - - -@@= skipped -21, +14 lines =@@ - // - // readonly x: string; - // --// async a() { } --// --// override b() {} --// --// public async c() { } --// } --// --// export function foo() { } -+// --- (line: 9) skipped --- - - - -@@= skipped -40, +33 lines =@@ +@@= skipped -134, +134 lines =@@ // === goToType === @@ -81,31 +9,15 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// // === /a.ts === // --- (line: 5) skipped --- -@@= skipped -31, +17 lines =@@ +@@= skipped -15, +16 lines =@@ // === goToType === @@ -114,35 +26,19 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// // === /a.ts === // --- (line: 5) skipped --- -@@= skipped -36, +22 lines =@@ +@@= skipped -20, +21 lines =@@ // // async a() { } // --// /*GOTO TYPE*/override [|b|]() {} +-// /*GOTO TYPE*/<|override [|b|]() {}|> +// /*GOTO TYPE*/override b() {} // // public async c() { } @@ -151,7 +47,7 @@ // // async a() { } // --// override [|b|]/*GOTO TYPE*/() {} +-// <|override [|b|]/*GOTO TYPE*/() {}|> +// override b/*GOTO TYPE*/() {} // // public async c() { } @@ -165,31 +61,15 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// // === /a.ts === // --- (line: 9) skipped --- -@@= skipped -30, +16 lines =@@ +@@= skipped -14, +15 lines =@@ // === goToType === @@ -198,31 +78,15 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// // === /a.ts === // --- (line: 9) skipped --- -@@= skipped -30, +16 lines =@@ +@@= skipped -14, +15 lines =@@ // === goToType === @@ -231,31 +95,15 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// // === /a.ts === // --- (line: 9) skipped --- -@@= skipped -30, +16 lines =@@ +@@= skipped -14, +15 lines =@@ // === goToType === @@ -264,35 +112,19 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// // === /a.ts === // --- (line: 9) skipped --- -@@= skipped -35, +21 lines =@@ +@@= skipped -19, +20 lines =@@ // public async c() { } // } // --// exp/*GOTO TYPE*/ort function [|foo|]() { } +-// <|exp/*GOTO TYPE*/ort function [|foo|]() { }|> +// exp/*GOTO TYPE*/ort function foo() { } @@ -301,5 +133,5 @@ // public async c() { } // } // --// export function [|foo|]/*GOTO TYPE*/() { } +-// <|export function [|foo|]/*GOTO TYPE*/() { }|> +// export function foo/*GOTO TYPE*/() { } \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc index e4615be10b..5f9ac0a791 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionModule.baseline.jsonc @@ -1,8 +1,8 @@ // === goToType === // === /module1.ts === -// module [|M|] { +// <|module [|M|] { // export var p; -// } +// }|> // var m: typeof M; // === /module3.ts === @@ -13,9 +13,9 @@ // === goToType === // === /module1.ts === -// module [|M|] { +// <|module [|M|] { // export var p; -// } +// }|> // var m: typeof M; // === /module3.ts === diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc index b29b559356..72b464dc03 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinitionUnionType.baseline.jsonc @@ -1,17 +1,17 @@ // === goToType === // === /goToTypeDefinitionUnionType.ts === -// class [|C|] { +// <|class [|C|] { // p; -// } +// }|> // -// interface [|I|] { +// <|interface [|I|] { // x; -// } +// }|> // // module M { -// export interface [|I|] { +// <|export interface [|I|] { // y; -// } +// }|> // } // // var x: C | I | M.I; diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc index 1b4578e9f7..6c48c735ab 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc @@ -13,10 +13,196 @@ // slice(start?: number, end?: number): T[]; // } // -// interface [|Array|] { +// <|interface [|Array|] { // /** // * Gets or sets the length of the array. This is a number one higher than the highest index in the array. // */ +// length: number; +// /** +// * Returns a string representation of an array. +// */ +// toString(): string; +// /** +// * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods. +// */ +// toLocaleString(): string; +// /** +// * Removes the last element from an array and returns it. +// * If the array is empty, undefined is returned and the array is not modified. +// */ +// pop(): T | undefined; +// /** +// * Appends new elements to the end of an array, and returns the new length of the array. +// * @param items New elements to add to the array. +// */ +// push(...items: T[]): number; +// /** +// * Combines two or more arrays. +// * This method returns a new array without modifying any existing arrays. +// * @param items Additional arrays and/or items to add to the end of the array. +// */ +// concat(...items: ConcatArray[]): T[]; +// /** +// * Combines two or more arrays. +// * This method returns a new array without modifying any existing arrays. +// * @param items Additional arrays and/or items to add to the end of the array. +// */ +// concat(...items: (T | ConcatArray)[]): T[]; +// /** +// * Adds all the elements of an array into a string, separated by the specified separator string. +// * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma. +// */ +// join(separator?: string): string; +// /** +// * Reverses the elements in an array in place. +// * This method mutates the array and returns a reference to the same array. +// */ +// reverse(): T[]; +// /** +// * Removes the first element from an array and returns it. +// * If the array is empty, undefined is returned and the array is not modified. +// */ +// shift(): T | undefined; +// /** +// * Returns a copy of a section of an array. +// * For both start and end, a negative index can be used to indicate an offset from the end of the array. +// * For example, -2 refers to the second to last element of the array. +// * @param start The beginning index of the specified portion of the array. +// * If start is undefined, then the slice begins at index 0. +// * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'. +// * If end is undefined, then the slice extends to the end of the array. +// */ +// slice(start?: number, end?: number): T[]; +// /** +// * Sorts an array in place. +// * This method mutates the array and returns a reference to the same array. +// * @param compareFn Function used to determine the order of the elements. It is expected to return +// * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive +// * value otherwise. If omitted, the elements are sorted in ascending, UTF-16 code unit order. +// * ```ts +// * [11,2,22,1].sort((a, b) => a - b) +// * ``` +// */ +// sort(compareFn?: (a: T, b: T) => number): this; +// /** +// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +// * @param start The zero-based location in the array from which to start removing elements. +// * @param deleteCount The number of elements to remove. Omitting this argument will remove all elements from the start +// * paramater location to end of the array. If value of this argument is either a negative number, zero, undefined, or a type +// * that cannot be converted to an integer, the function will evaluate the argument as zero and not remove any elements. +// * @returns An array containing the elements that were deleted. +// */ +// splice(start: number, deleteCount?: number): T[]; +// /** +// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +// * @param start The zero-based location in the array from which to start removing elements. +// * @param deleteCount The number of elements to remove. If value of this argument is either a negative number, zero, +// * undefined, or a type that cannot be converted to an integer, the function will evaluate the argument as zero and +// * not remove any elements. +// * @param items Elements to insert into the array in place of the deleted elements. +// * @returns An array containing the elements that were deleted. +// */ +// splice(start: number, deleteCount: number, ...items: T[]): T[]; +// /** +// * Inserts new elements at the start of an array, and returns the new length of the array. +// * @param items Elements to insert at the start of the array. +// */ +// unshift(...items: T[]): number; +// /** +// * Returns the index of the first occurrence of a value in an array, or -1 if it is not present. +// * @param searchElement The value to locate in the array. +// * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. +// */ +// indexOf(searchElement: T, fromIndex?: number): number; +// /** +// * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present. +// * @param searchElement The value to locate in the array. +// * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array. +// */ +// lastIndexOf(searchElement: T, fromIndex?: number): number; +// /** +// * Determines whether all the members of an array satisfy the specified test. +// * @param predicate A function that accepts up to three arguments. The every method calls +// * the predicate function for each element in the array until the predicate returns a value +// * which is coercible to the Boolean value false, or until the end of the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. +// * If thisArg is omitted, undefined is used as the this value. +// */ +// every(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[]; +// /** +// * Determines whether all the members of an array satisfy the specified test. +// * @param predicate A function that accepts up to three arguments. The every method calls +// * the predicate function for each element in the array until the predicate returns a value +// * which is coercible to the Boolean value false, or until the end of the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. +// * If thisArg is omitted, undefined is used as the this value. +// */ +// every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +// /** +// * Determines whether the specified callback function returns true for any element of an array. +// * @param predicate A function that accepts up to three arguments. The some method calls +// * the predicate function for each element in the array until the predicate returns a value +// * which is coercible to the Boolean value true, or until the end of the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. +// * If thisArg is omitted, undefined is used as the this value. +// */ +// some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +// /** +// * Performs the specified action for each element in an array. +// * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +// */ +// forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; +// /** +// * Calls a defined callback function on each element of an array, and returns an array that contains the results. +// * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +// */ +// map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; +// /** +// * Returns the elements of an array that meet the condition specified in a callback function. +// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +// */ +// filter(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; +// /** +// * Returns the elements of an array that meet the condition specified in a callback function. +// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +// */ +// filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; +// /** +// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +// /** +// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +// /** +// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +// /** +// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +// +// [n: number]: T; +// }|> +// +// interface ArrayConstructor { +// new (arrayLength?: number): any[]; // --- (line: --) skipped --- // @@ -24,7 +210,7 @@ // readonly prototype: any[]; // } // -// declare var [|Array|]: ArrayConstructor; +// <|declare var [|Array|]: ArrayConstructor;|> // // interface TypedPropertyDescriptor { // enumerable?: boolean; @@ -52,10 +238,196 @@ // slice(start?: number, end?: number): T[]; // } // -// interface [|Array|] { +// <|interface [|Array|] { // /** // * Gets or sets the length of the array. This is a number one higher than the highest index in the array. // */ +// length: number; +// /** +// * Returns a string representation of an array. +// */ +// toString(): string; +// /** +// * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods. +// */ +// toLocaleString(): string; +// /** +// * Removes the last element from an array and returns it. +// * If the array is empty, undefined is returned and the array is not modified. +// */ +// pop(): T | undefined; +// /** +// * Appends new elements to the end of an array, and returns the new length of the array. +// * @param items New elements to add to the array. +// */ +// push(...items: T[]): number; +// /** +// * Combines two or more arrays. +// * This method returns a new array without modifying any existing arrays. +// * @param items Additional arrays and/or items to add to the end of the array. +// */ +// concat(...items: ConcatArray[]): T[]; +// /** +// * Combines two or more arrays. +// * This method returns a new array without modifying any existing arrays. +// * @param items Additional arrays and/or items to add to the end of the array. +// */ +// concat(...items: (T | ConcatArray)[]): T[]; +// /** +// * Adds all the elements of an array into a string, separated by the specified separator string. +// * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma. +// */ +// join(separator?: string): string; +// /** +// * Reverses the elements in an array in place. +// * This method mutates the array and returns a reference to the same array. +// */ +// reverse(): T[]; +// /** +// * Removes the first element from an array and returns it. +// * If the array is empty, undefined is returned and the array is not modified. +// */ +// shift(): T | undefined; +// /** +// * Returns a copy of a section of an array. +// * For both start and end, a negative index can be used to indicate an offset from the end of the array. +// * For example, -2 refers to the second to last element of the array. +// * @param start The beginning index of the specified portion of the array. +// * If start is undefined, then the slice begins at index 0. +// * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'. +// * If end is undefined, then the slice extends to the end of the array. +// */ +// slice(start?: number, end?: number): T[]; +// /** +// * Sorts an array in place. +// * This method mutates the array and returns a reference to the same array. +// * @param compareFn Function used to determine the order of the elements. It is expected to return +// * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive +// * value otherwise. If omitted, the elements are sorted in ascending, UTF-16 code unit order. +// * ```ts +// * [11,2,22,1].sort((a, b) => a - b) +// * ``` +// */ +// sort(compareFn?: (a: T, b: T) => number): this; +// /** +// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +// * @param start The zero-based location in the array from which to start removing elements. +// * @param deleteCount The number of elements to remove. Omitting this argument will remove all elements from the start +// * paramater location to end of the array. If value of this argument is either a negative number, zero, undefined, or a type +// * that cannot be converted to an integer, the function will evaluate the argument as zero and not remove any elements. +// * @returns An array containing the elements that were deleted. +// */ +// splice(start: number, deleteCount?: number): T[]; +// /** +// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. +// * @param start The zero-based location in the array from which to start removing elements. +// * @param deleteCount The number of elements to remove. If value of this argument is either a negative number, zero, +// * undefined, or a type that cannot be converted to an integer, the function will evaluate the argument as zero and +// * not remove any elements. +// * @param items Elements to insert into the array in place of the deleted elements. +// * @returns An array containing the elements that were deleted. +// */ +// splice(start: number, deleteCount: number, ...items: T[]): T[]; +// /** +// * Inserts new elements at the start of an array, and returns the new length of the array. +// * @param items Elements to insert at the start of the array. +// */ +// unshift(...items: T[]): number; +// /** +// * Returns the index of the first occurrence of a value in an array, or -1 if it is not present. +// * @param searchElement The value to locate in the array. +// * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. +// */ +// indexOf(searchElement: T, fromIndex?: number): number; +// /** +// * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present. +// * @param searchElement The value to locate in the array. +// * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array. +// */ +// lastIndexOf(searchElement: T, fromIndex?: number): number; +// /** +// * Determines whether all the members of an array satisfy the specified test. +// * @param predicate A function that accepts up to three arguments. The every method calls +// * the predicate function for each element in the array until the predicate returns a value +// * which is coercible to the Boolean value false, or until the end of the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. +// * If thisArg is omitted, undefined is used as the this value. +// */ +// every(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[]; +// /** +// * Determines whether all the members of an array satisfy the specified test. +// * @param predicate A function that accepts up to three arguments. The every method calls +// * the predicate function for each element in the array until the predicate returns a value +// * which is coercible to the Boolean value false, or until the end of the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. +// * If thisArg is omitted, undefined is used as the this value. +// */ +// every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +// /** +// * Determines whether the specified callback function returns true for any element of an array. +// * @param predicate A function that accepts up to three arguments. The some method calls +// * the predicate function for each element in the array until the predicate returns a value +// * which is coercible to the Boolean value true, or until the end of the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. +// * If thisArg is omitted, undefined is used as the this value. +// */ +// some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; +// /** +// * Performs the specified action for each element in an array. +// * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +// */ +// forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; +// /** +// * Calls a defined callback function on each element of an array, and returns an array that contains the results. +// * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. +// */ +// map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; +// /** +// * Returns the elements of an array that meet the condition specified in a callback function. +// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +// */ +// filter(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; +// /** +// * Returns the elements of an array that meet the condition specified in a callback function. +// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. +// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. +// */ +// filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; +// /** +// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +// /** +// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +// /** +// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; +// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; +// /** +// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. +// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. +// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. +// */ +// reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; +// +// [n: number]: T; +// }|> +// +// interface ArrayConstructor { +// new (arrayLength?: number): any[]; // --- (line: --) skipped --- // @@ -63,7 +435,7 @@ // readonly prototype: any[]; // } // -// declare var [|Array|]: ArrayConstructor; +// <|declare var [|Array|]: ArrayConstructor;|> // // interface TypedPropertyDescriptor { // enumerable?: boolean; @@ -78,6 +450,6 @@ // declare const users2: UsersArr // users2 // -// class [|CustomArray|] extends Array { immutableReverse() { return [...this].reverse() } } +// <|class [|CustomArray|] extends Array { immutableReverse() { return [...this].reverse() } }|> // declare const users3: CustomArray // /*GOTO TYPE*/users3 \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff index d3a0953c00..8e2930a38c 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_arrayType.baseline.jsonc.diff @@ -9,202 +9,15 @@ // --- (line: --) skipped --- // slice(start?: number, end?: number): T[]; // } -@@= skipped -9, +9 lines =@@ - // /** - // * Gets or sets the length of the array. This is a number one higher than the highest index in the array. - // */ --// length: number; --// /** --// * Returns a string representation of an array. --// */ --// toString(): string; --// /** --// * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods. --// */ --// toLocaleString(): string; --// /** --// * Removes the last element from an array and returns it. --// * If the array is empty, undefined is returned and the array is not modified. --// */ --// pop(): T | undefined; --// /** --// * Appends new elements to the end of an array, and returns the new length of the array. --// * @param items New elements to add to the array. --// */ --// push(...items: T[]): number; --// /** --// * Combines two or more arrays. --// * This method returns a new array without modifying any existing arrays. --// * @param items Additional arrays and/or items to add to the end of the array. --// */ --// concat(...items: ConcatArray[]): T[]; --// /** --// * Combines two or more arrays. --// * This method returns a new array without modifying any existing arrays. --// * @param items Additional arrays and/or items to add to the end of the array. --// */ --// concat(...items: (T | ConcatArray)[]): T[]; --// /** --// * Adds all the elements of an array into a string, separated by the specified separator string. --// * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma. --// */ --// join(separator?: string): string; --// /** --// * Reverses the elements in an array in place. --// * This method mutates the array and returns a reference to the same array. --// */ --// reverse(): T[]; --// /** --// * Removes the first element from an array and returns it. --// * If the array is empty, undefined is returned and the array is not modified. --// */ --// shift(): T | undefined; --// /** --// * Returns a copy of a section of an array. --// * For both start and end, a negative index can be used to indicate an offset from the end of the array. --// * For example, -2 refers to the second to last element of the array. --// * @param start The beginning index of the specified portion of the array. --// * If start is undefined, then the slice begins at index 0. --// * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'. --// * If end is undefined, then the slice extends to the end of the array. --// */ --// slice(start?: number, end?: number): T[]; --// /** --// * Sorts an array in place. --// * This method mutates the array and returns a reference to the same array. --// * @param compareFn Function used to determine the order of the elements. It is expected to return --// * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive --// * value otherwise. If omitted, the elements are sorted in ascending, UTF-16 code unit order. --// * ```ts --// * [11,2,22,1].sort((a, b) => a - b) --// * ``` --// */ --// sort(compareFn?: (a: T, b: T) => number): this; --// /** --// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. --// * @param start The zero-based location in the array from which to start removing elements. --// * @param deleteCount The number of elements to remove. Omitting this argument will remove all elements from the start --// * paramater location to end of the array. If value of this argument is either a negative number, zero, undefined, or a type --// * that cannot be converted to an integer, the function will evaluate the argument as zero and not remove any elements. --// * @returns An array containing the elements that were deleted. --// */ --// splice(start: number, deleteCount?: number): T[]; --// /** --// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. --// * @param start The zero-based location in the array from which to start removing elements. --// * @param deleteCount The number of elements to remove. If value of this argument is either a negative number, zero, --// * undefined, or a type that cannot be converted to an integer, the function will evaluate the argument as zero and --// * not remove any elements. --// * @param items Elements to insert into the array in place of the deleted elements. --// * @returns An array containing the elements that were deleted. --// */ --// splice(start: number, deleteCount: number, ...items: T[]): T[]; --// /** --// * Inserts new elements at the start of an array, and returns the new length of the array. --// * @param items Elements to insert at the start of the array. --// */ --// unshift(...items: T[]): number; --// /** --// * Returns the index of the first occurrence of a value in an array, or -1 if it is not present. --// * @param searchElement The value to locate in the array. --// * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. --// */ --// indexOf(searchElement: T, fromIndex?: number): number; --// /** --// * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present. --// * @param searchElement The value to locate in the array. --// * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array. --// */ --// lastIndexOf(searchElement: T, fromIndex?: number): number; --// /** --// * Determines whether all the members of an array satisfy the specified test. --// * @param predicate A function that accepts up to three arguments. The every method calls --// * the predicate function for each element in the array until the predicate returns a value --// * which is coercible to the Boolean value false, or until the end of the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. --// * If thisArg is omitted, undefined is used as the this value. --// */ --// every(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[]; --// /** --// * Determines whether all the members of an array satisfy the specified test. --// * @param predicate A function that accepts up to three arguments. The every method calls --// * the predicate function for each element in the array until the predicate returns a value --// * which is coercible to the Boolean value false, or until the end of the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. --// * If thisArg is omitted, undefined is used as the this value. --// */ --// every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; --// /** --// * Determines whether the specified callback function returns true for any element of an array. --// * @param predicate A function that accepts up to three arguments. The some method calls --// * the predicate function for each element in the array until the predicate returns a value --// * which is coercible to the Boolean value true, or until the end of the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. --// * If thisArg is omitted, undefined is used as the this value. --// */ --// some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; --// /** --// * Performs the specified action for each element in an array. --// * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. --// */ --// forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; --// /** --// * Calls a defined callback function on each element of an array, and returns an array that contains the results. --// * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. --// */ --// map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; --// /** --// * Returns the elements of an array that meet the condition specified in a callback function. --// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. --// */ --// filter(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; --// /** --// * Returns the elements of an array that meet the condition specified in a callback function. --// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. --// */ --// filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; --// /** --// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; --// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; --// /** --// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; --// /** --// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; --// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; --// /** --// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; --// --// [n: number]: T; --// } --// --// interface ArrayConstructor { --// new (arrayLength?: number): any[]; +@@= skipped -196, +196 lines =@@ + // interface ArrayConstructor { + // new (arrayLength?: number): any[]; // --- (line: --) skipped --- +// // --- (line: --) skipped --- // readonly prototype: any[]; -@@= skipped -197, +12 lines =@@ +@@= skipped -10, +11 lines =@@ // interface TypedPropertyDescriptor { // enumerable?: boolean; // --- (line: --) skipped --- @@ -221,202 +34,15 @@ // --- (line: --) skipped --- // slice(start?: number, end?: number): T[]; // } -@@= skipped -9, +9 lines =@@ - // /** - // * Gets or sets the length of the array. This is a number one higher than the highest index in the array. - // */ --// length: number; --// /** --// * Returns a string representation of an array. --// */ --// toString(): string; --// /** --// * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods. --// */ --// toLocaleString(): string; --// /** --// * Removes the last element from an array and returns it. --// * If the array is empty, undefined is returned and the array is not modified. --// */ --// pop(): T | undefined; --// /** --// * Appends new elements to the end of an array, and returns the new length of the array. --// * @param items New elements to add to the array. --// */ --// push(...items: T[]): number; --// /** --// * Combines two or more arrays. --// * This method returns a new array without modifying any existing arrays. --// * @param items Additional arrays and/or items to add to the end of the array. --// */ --// concat(...items: ConcatArray[]): T[]; --// /** --// * Combines two or more arrays. --// * This method returns a new array without modifying any existing arrays. --// * @param items Additional arrays and/or items to add to the end of the array. --// */ --// concat(...items: (T | ConcatArray)[]): T[]; --// /** --// * Adds all the elements of an array into a string, separated by the specified separator string. --// * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma. --// */ --// join(separator?: string): string; --// /** --// * Reverses the elements in an array in place. --// * This method mutates the array and returns a reference to the same array. --// */ --// reverse(): T[]; --// /** --// * Removes the first element from an array and returns it. --// * If the array is empty, undefined is returned and the array is not modified. --// */ --// shift(): T | undefined; --// /** --// * Returns a copy of a section of an array. --// * For both start and end, a negative index can be used to indicate an offset from the end of the array. --// * For example, -2 refers to the second to last element of the array. --// * @param start The beginning index of the specified portion of the array. --// * If start is undefined, then the slice begins at index 0. --// * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'. --// * If end is undefined, then the slice extends to the end of the array. --// */ --// slice(start?: number, end?: number): T[]; --// /** --// * Sorts an array in place. --// * This method mutates the array and returns a reference to the same array. --// * @param compareFn Function used to determine the order of the elements. It is expected to return --// * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive --// * value otherwise. If omitted, the elements are sorted in ascending, UTF-16 code unit order. --// * ```ts --// * [11,2,22,1].sort((a, b) => a - b) --// * ``` --// */ --// sort(compareFn?: (a: T, b: T) => number): this; --// /** --// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. --// * @param start The zero-based location in the array from which to start removing elements. --// * @param deleteCount The number of elements to remove. Omitting this argument will remove all elements from the start --// * paramater location to end of the array. If value of this argument is either a negative number, zero, undefined, or a type --// * that cannot be converted to an integer, the function will evaluate the argument as zero and not remove any elements. --// * @returns An array containing the elements that were deleted. --// */ --// splice(start: number, deleteCount?: number): T[]; --// /** --// * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. --// * @param start The zero-based location in the array from which to start removing elements. --// * @param deleteCount The number of elements to remove. If value of this argument is either a negative number, zero, --// * undefined, or a type that cannot be converted to an integer, the function will evaluate the argument as zero and --// * not remove any elements. --// * @param items Elements to insert into the array in place of the deleted elements. --// * @returns An array containing the elements that were deleted. --// */ --// splice(start: number, deleteCount: number, ...items: T[]): T[]; --// /** --// * Inserts new elements at the start of an array, and returns the new length of the array. --// * @param items Elements to insert at the start of the array. --// */ --// unshift(...items: T[]): number; --// /** --// * Returns the index of the first occurrence of a value in an array, or -1 if it is not present. --// * @param searchElement The value to locate in the array. --// * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. --// */ --// indexOf(searchElement: T, fromIndex?: number): number; --// /** --// * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present. --// * @param searchElement The value to locate in the array. --// * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array. --// */ --// lastIndexOf(searchElement: T, fromIndex?: number): number; --// /** --// * Determines whether all the members of an array satisfy the specified test. --// * @param predicate A function that accepts up to three arguments. The every method calls --// * the predicate function for each element in the array until the predicate returns a value --// * which is coercible to the Boolean value false, or until the end of the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. --// * If thisArg is omitted, undefined is used as the this value. --// */ --// every(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[]; --// /** --// * Determines whether all the members of an array satisfy the specified test. --// * @param predicate A function that accepts up to three arguments. The every method calls --// * the predicate function for each element in the array until the predicate returns a value --// * which is coercible to the Boolean value false, or until the end of the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. --// * If thisArg is omitted, undefined is used as the this value. --// */ --// every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; --// /** --// * Determines whether the specified callback function returns true for any element of an array. --// * @param predicate A function that accepts up to three arguments. The some method calls --// * the predicate function for each element in the array until the predicate returns a value --// * which is coercible to the Boolean value true, or until the end of the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. --// * If thisArg is omitted, undefined is used as the this value. --// */ --// some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean; --// /** --// * Performs the specified action for each element in an array. --// * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. --// */ --// forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; --// /** --// * Calls a defined callback function on each element of an array, and returns an array that contains the results. --// * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. --// */ --// map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; --// /** --// * Returns the elements of an array that meet the condition specified in a callback function. --// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. --// */ --// filter(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; --// /** --// * Returns the elements of an array that meet the condition specified in a callback function. --// * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. --// * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. --// */ --// filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; --// /** --// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; --// reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; --// /** --// * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; --// /** --// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; --// reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; --// /** --// * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. --// * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. --// * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. --// */ --// reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; --// --// [n: number]: T; --// } --// --// interface ArrayConstructor { --// new (arrayLength?: number): any[]; +@@= skipped -196, +196 lines =@@ + // interface ArrayConstructor { + // new (arrayLength?: number): any[]; // --- (line: --) skipped --- +// // --- (line: --) skipped --- // readonly prototype: any[]; -@@= skipped -197, +12 lines =@@ +@@= skipped -10, +11 lines =@@ // interface TypedPropertyDescriptor { // enumerable?: boolean; // --- (line: --) skipped --- diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc index 3d03737d36..4482e85ef1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc @@ -12,10 +12,25 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // @@ -35,9 +50,24 @@ // /** // * Represents the completion of an asynchronous operation // */ -// interface [|Promise|] { +// <|interface [|Promise|] { // /** // * Attaches callbacks for the resolution and/or rejection of the Promise. // * @param onfulfilled The callback to execute when the Promise is resolved. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of which ever callback is executed. +// */ +// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; +// +// /** +// * Attaches a callback for only the rejection of the Promise. +// * @param onrejected The callback to execute when the Promise is rejected. +// * @returns A Promise for the completion of the callback. +// */ +// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; +// }|> +// +// /** +// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- // \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff index 85e1db9a52..045dc278f3 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_promiseType.baseline.jsonc.diff @@ -9,31 +9,15 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// -@@= skipped -28, +14 lines =@@ +@@= skipped -12, +13 lines =@@ // // export {} @@ -42,24 +26,8 @@ // --- (line: --) skipped --- // /** // * Represents the completion of an asynchronous operation -@@= skipped -9, +9 lines =@@ - // /** - // * Attaches callbacks for the resolution and/or rejection of the Promise. - // * @param onfulfilled The callback to execute when the Promise is resolved. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of which ever callback is executed. --// */ --// then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; --// --// /** --// * Attaches a callback for only the rejection of the Promise. --// * @param onrejected The callback to execute when the Promise is rejected. --// * @returns A Promise for the completion of the callback. --// */ --// catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise; --// } --// --// /** --// * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. +@@= skipped -25, +25 lines =@@ + // /** + // * Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to `never`. This emulates the behavior of `await`. // --- (line: --) skipped --- +// \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc index 9ad76c35b4..b4b63ffcf1 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc @@ -1,6 +1,6 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === -// interface [|I|] { x: number; } +// <|interface [|I|] { x: number; }|> // interface J { y: number; } // // function f0(): I { return { x: 0 }; } @@ -45,7 +45,7 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === -// interface [|I|] { x: number; } +// <|interface [|I|] { x: number; }|> // interface J { y: number; } // // function f0(): I { return { x: 0 }; } @@ -90,7 +90,7 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === -// interface [|I|] { x: number; } +// <|interface [|I|] { x: number; }|> // interface J { y: number; } // // function f0(): I { return { x: 0 }; } @@ -110,8 +110,8 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === -// interface [|I|] { x: number; } -// interface [|J|] { y: number; } +// <|interface [|I|] { x: number; }|> +// <|interface [|J|] { y: number; }|> // // function f0(): I { return { x: 0 }; } // @@ -130,8 +130,8 @@ // === goToType === // === /goToTypeDefinition_returnType.ts === -// interface [|I|] { x: number; } -// interface [|J|] { y: number; } +// <|interface [|I|] { x: number; }|> +// <|interface [|J|] { y: number; }|> // // function f0(): I { return { x: 0 }; } // @@ -164,9 +164,9 @@ // // const f7 = (i: I) => {}; // -// function [|f8|](i: I): I; -// function [|f8|](j: J): J; -// function [|f8|](ij: any): any { return ij; } +// <|function [|f8|](i: I): I;|> +// <|function [|f8|](j: J): J;|> +// <|function [|f8|](ij: any): any { return ij; }|> // // f0(); // f1(); diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff index 28b440da8e..8e2fe47e95 100644 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff +++ b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition_returnType.baseline.jsonc.diff @@ -8,7 +8,7 @@ -// -// const f6 = (i: I, j: J, b: boolean) => b ? i : j; -// --// const [|f7|] = (i: I) => {}; +-// const [|f7|] = <|(i: I) => {}|>; -// -// function f8(i: I): I; -// function f8(j: J): J; @@ -29,8 +29,8 @@ +// +// const f7 = (i: I) => {}; +// -+// function [|f8|](i: I): I; -+// function [|f8|](j: J): J; - // function [|f8|](ij: any): any { return ij; } ++// <|function [|f8|](i: I): I;|> ++// <|function [|f8|](j: J): J;|> + // <|function [|f8|](ij: any): any { return ij; }|> // // f0(); \ No newline at end of file From 84fbe5568c2e16279be7c0c46d19791eef9536cf Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Wed, 19 Nov 2025 13:47:27 -0800 Subject: [PATCH 11/12] remove empty lines diff --- internal/fourslash/baselineutil.go | 10 +++++++--- .../jsxSpreadReference.baseline.jsonc.diff | 8 -------- ...enameDefaultImportDifferentName.baseline.jsonc.diff | 8 -------- .../goToType/goToTypeDefinition4.baseline.jsonc.diff | 8 -------- 4 files changed, 7 insertions(+), 27 deletions(-) delete mode 100644 testdata/baselines/reference/submodule/fourslash/findRenameLocations/jsxSpreadReference.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDefaultImportDifferentName.baseline.jsonc.diff delete mode 100644 testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff diff --git a/internal/fourslash/baselineutil.go b/internal/fourslash/baselineutil.go index bd0ba13e43..2635dfc9bc 100644 --- a/internal/fourslash/baselineutil.go +++ b/internal/fourslash/baselineutil.go @@ -126,7 +126,7 @@ func (f *FourslashTest) getBaselineOptions(command baselineCommand, testPath str commandLines = append(commandLines, fixedLine) } } - return strings.Join(commandLines, "\n") + return strings.Join(dropTrailingEmptyLines(commandLines), "\n") }, } case inlayHintsCmd: @@ -220,7 +220,7 @@ func (f *FourslashTest) getBaselineOptions(command baselineCommand, testPath str commandLines = append(commandLines, fixedLine) } } - return strings.Join(commandLines, "\n") + return strings.Join(dropTrailingEmptyLines(commandLines), "\n") }, DiffFixupNew: func(s string) string { lines := strings.Split(s, "\n") @@ -292,7 +292,7 @@ func (f *FourslashTest) getBaselineOptions(command baselineCommand, testPath str } } } - return strings.Join(commandLines, "\n") + return strings.Join(dropTrailingEmptyLines(commandLines), "\n") }, DiffFixupNew: func(s string) string { return strings.ReplaceAll(s, "bundled:///libs/", "") @@ -305,6 +305,10 @@ func (f *FourslashTest) getBaselineOptions(command baselineCommand, testPath str } } +func dropTrailingEmptyLines(ss []string) []string { + return ss[:core.FindLastIndex(ss, func(s string) bool { return s != "" })+1] +} + func isSubmoduleTest(testPath string) bool { return strings.Contains(testPath, "fourslash/tests/gen") || strings.Contains(testPath, "fourslash/tests/manual") } diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/jsxSpreadReference.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/jsxSpreadReference.baseline.jsonc.diff deleted file mode 100644 index d29a7198d1..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/jsxSpreadReference.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.jsxSpreadReference.baseline.jsonc -+++ new.jsxSpreadReference.baseline.jsonc -@@= skipped -16, +16 lines =@@ - // - // var [|nnRENAME|]: {name?: string; size?: number}; - // var x = ; -- -- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDefaultImportDifferentName.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDefaultImportDifferentName.baseline.jsonc.diff deleted file mode 100644 index f45fc22589..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/renameDefaultImportDifferentName.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.renameDefaultImportDifferentName.baseline.jsonc -+++ new.renameDefaultImportDifferentName.baseline.jsonc -@@= skipped -19, +19 lines =@@ - // import [|BRENAME|] from "./B"; - // let b = new /*RENAME*/[|BRENAME|](); - // b.test(); -- -- \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff deleted file mode 100644 index 237d4613c8..0000000000 --- a/testdata/baselines/reference/submodule/fourslash/goToType/goToTypeDefinition4.baseline.jsonc.diff +++ /dev/null @@ -1,8 +0,0 @@ ---- old.goToTypeDefinition4.baseline.jsonc -+++ new.goToTypeDefinition4.baseline.jsonc -@@= skipped -1, +1 lines =@@ - // === /bar.ts === - // import { T } from "./foo"; - // let x: /*GOTO TYPE*/T; -- -- \ No newline at end of file From cd30f257b458617318d22f1e3c1ff2c80f447544 Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Wed, 19 Nov 2025 15:41:02 -0800 Subject: [PATCH 12/12] refactor embed fix --- internal/bundled/embed.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/bundled/embed.go b/internal/bundled/embed.go index 2ec7bf83e1..cf92102db3 100644 --- a/internal/bundled/embed.go +++ b/internal/bundled/embed.go @@ -131,7 +131,7 @@ func (vfs *wrappedFS) walkDir(rest string, walkFn vfs.WalkDirFunc) error { return err } if entry.IsDir() { - if err := vfs.walkDir(entry.Name(), walkFn); err != nil { + if err := vfs.walkDir(strings.TrimPrefix(name, "/"), walkFn); err != nil { return err } }